그래서 멀티 스레딩 디버그 런타임 DLL을 사용하여 Visual Studio 10에서 디버그 응용 프로그램의 오류가 발생합니다. 나는 인터넷 검색의 공평한 분배를 수행했으며, 다른 런타임 라이브러리 버전을 사용하는 외부 라이브러리에 링크하는 응용 프로그램에 대한 참조 만있었습니다 (여기서는 그렇지 않다고 생각합니다).msvcp100d.dll에서 크래시를 디버깅하는 방법
코드의 마지막 비트는 _Lockit::_Lockit(3)
의 정의이며, _Mtxlock(&mtx[3]);
을 호출합니다. 여기서 mtx
은 중요한 섹션의 배열입니다. 간헐적으로 만 발생하는 것으로 생각되는 이런 종류의 오류를 어떻게 디버깅합니까? 이 경우 소멸되는 문자열은 함수에서 임시로 반환되므로 소멸되거나 다른 곳에서도 참조 될 가능성은 없습니다.
ntdll.dll!76fbb42b()
ntdll.dll!76fbb3ce()
ntdll.dll!76f70133()
msvcp100d.dll!std::_Lockit::_Lockit(int kind) Line 64 + 0x14 bytes C++
msvcp100d.dll!std::_Container_base12::_Orphan_all() Line 200 C++
MyExe.exe!std::_String_val<wchar_t,std::allocator<wchar_t> >::~_String_val<wchar_t,std::allocator<wchar_t> >() Line 478 + 0xb bytes C++
MyExe.exe!std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::~basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >() Line 754 + 0xf bytes C++
편집 :
PUGI__FN std::wstring xml_node::to_wstr() const
{
xml_writer_string wsr;
this->print(wsr, L"", format_raw, encoding_wchar);
return wsr.mResult;
}
(수정과 pugixml 라이브러리를 사용하여) 요청에 따라, 다음과 같은 문제가 발생하는 코드 xmlMessage.to_wstr()와
xml_document xmlMessage;
xml_node pRoot = xmlMessage.append_child(L"event");
pRoot.append_child(L"id", to_wstr(id).c_str());
Instance().SendMessage(xmlMessage.to_wstr());
같이 구현되고
class PUGIXML_CLASS xml_writer_string : public xml_writer
{
public:
// Construct writer from an output stream object
virtual void write(const void* data, size_t size);
std::wstring mResult;
};
PUGI__FN void xml_writer_string::write(const void* data, size_t size)
{
mResult += std::wstring(static_cast<const wchar_t*>(data), size/sizeof(wchar_t));
}
:
및 xml_writer_string는 다음과 같이 구현되는 0
난 당신이 런타임 예외를 가지고 같은데요? 그렇다면 오류 코드는 무엇입니까? –
재시작이 필요했습니다. 다음에 할 수있는 시간에 잡을 것입니다. '액세스 위반은 0xcccccd를 읽는 것'이었습니다. – Rollie
코드의 문제 일 가능성이 큽니다. 당신은 잘못된 곳에서 문제를 찾고 있습니다. 액세스 위반을 일으키는 코드를 게시 한 경우 유용 할 수 있습니다. –