이상한 프로그램을 끊고,이것은 무엇을 의미합에 디버깅?
-
03-07-2019 - |
문제
이상한 프로그램을 끊고,이것은 무엇을 의미합에 디버깅?
를 부착한 후에 windbg 내가 찾은 다음과 같다:
(1714.258): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=015b5c74 ebx=178a13e0 ecx=dddddddd edx=009a8ca0 esi=09fbf698 edi=09fbf594 eip=005ae2f7 esp=09fbf4a4 ebp=09fbf594 iopl=0 nv up ei ng nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010286 TestApplication!std::_Container_base::_Orphan_all+0x57: 005ae2f7 c70100000000 mov dword ptr [ecx],0 ds:0023:dddddddd=????????
호출 스택:
TestApplication!std::_Container_base::_Orphan_all+0x57 TestApplication!std::vector >::operator=+0x37 TestApplication!boost::asio::detail::win_iocp_io_service::do_one+0x189 TestApplication!boost::asio::detail::win_iocp_io_service::run+0xa2 TestApplication!boost::asio::io_service::run+0x3a
해결책
문제
첫 번째 예외는 디버거를 주는,사람을 사용하여 디버거,첫 번째 기회를 디버깅을 제외하기 전에,그것은 그것을 발생시에 프로그램을 처리하는 문제입니다.
이 경우에는 예외입니다"액세스 위반".즉,프로그램이 노력하고 읽기/쓰기에서 불법적인 메모리 위치에 있습니다.
액세스 위반이 심각한 사촌 될 수 있는 손상을 몇 가지 메모리에 있어서 중요한 사항입니다 당신의 프로그램이 가능한 이유는 당신의 프로그램에 대한 액세스를 제공합니다.
에 오류가 지시는 것은 당신이 얻을하려고하는 내용 4 바이트 값에서는 불법이다.
문제를 디버깅
이 코드는 다음을 쉽게 할 수 있는 디버그에 이 문제를 설정하여 디버그 상징하는 위치에 출력하는 폴더의 컴파일러(이 포함되어 있는 관련 pdb 파일)
를 얻을 때 당신은 이 예외를 얻을 호출 스택(하나의 보 windows 것)
이것은 당신을 보여 위치 코드에서는 오류가 발상지입니다.
지금 들어 있는 파일을 열고 이 소스 및 중단점을 설정과 프로그램의 이점과 중지 내부 windebugger.디버그에서 이 시점을 정확히 알고 있는 코드의 라인이 위반을 던진
팁:부스트와 함께 제공원할 수 있도록 쉽게 휴식을 넣어 포인트 내부 이 코드입니다.을 누르십시오 F11 디버깅하는 동안 얻을 때 asio::세부사항::win_iocp_io_service::do_one.
다른 팁
MSVC 및 디버그 빌드 구성을 사용하는 경우 0xdddddddd
일반적으로 해방 된 메모리에 액세스하려고한다는 것을 의미합니다. Debug CRT 메모리 관리자는 무료 메모리를 채 웁니다 0xdd
.
ECX 레지스터에는 잘못된 주소 (DDDDDDDD)가 있습니다. 나는 이것이 기억 부패의 경우라고 제안합니다. 프로세스를 위해 GFLAG를 켜는 것을 고려하십시오.
Callstack은 전적으로 STL/BOOST 코드입니다. 당신이하고있는 일이 평범하지 않은 한, 버그가 당신이 붙여 넣은 콜 스택의 어느 부분에 있다고 가정하지 않을 것입니다.
확인해야 할 몇 가지 사항 :
정의해야하지만 정의 해야하는 부스트 특정 #defines가 있습니까?
SCL 및 반복자 디버깅을 보호하십시오. 활성화/비활성화를 시도하십시오.
디버그 및 릴리스 코드를 믹싱하고 있습니까? (STL/부스트 컨테이너를 사용한 나쁜 생각)