2012-06-15 2 views
0

릴리스 폴더에서 실행하려고 할 때 응용 프로그램이 계속 충돌합니다.사용 방법 WinDbg의 디버깅 정보

try catch 블록 안에 로그를 넣고 캡처하지만 모두 한 가지 방법을 가리 킵니다. Deatiled 문제는 내 previous post에 있습니다.

그런 다음 WinDbg를 사용하고 실행 파일을 첨부하여 내 응용 프로그램이 정확히 충돌하는지 확인했습니다. 이제 WinDbg의 정보가 이상하게 보입니다.

(13e4.1444): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. *** ERROR: Symbol file could not be found. Defaulted to export symbols for E:\VCS\DeskconWSP\Deskcon\bin\Release\tinyWRAP.dll - eax=0e7e1c00 ebx=0d83d918 ecx=0d835b70 edx=0cce8ce0 esi=0d835b70 edi=ffffffff eip=00000000 esp=0e4dfa4c ebp=0e4dfa58 iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010202 00000000 ?? ???

이 디버그 정보를 사용하는 방법에 대한 참조 또는 참고 사항은 무엇입니까?

+2

이것은 기초를 배우기에 좋은 장소가 아닙니다. 그것은 매우 파괴 된 SWIG 래퍼에 의해 적절하게 설명 된 NullReferenceException에 폭탄을 던집니다. MediaSessionMgr *이 HandleRef가 될 수있는 시나리오는 없습니다. 전형적인 SWIG 손실 btw. 적어도 OpenVCS에 대한 다른 사람의 래퍼를 사용하십시오. http://code.google.com/p/openvcs/source/browse/trunk/OpenVCSApp/Sip/Bridge.cs?r=14 –

+0

이것은 첫 번째 기회 예외이므로 적어도이 시점에서는 응용 프로그램이 손상되지 않습니다. 이것이 처리되지 않으면 그렇게됩니다. 한스 (Hans)에 따르면 이것이 NullReferenceException 일 가능성이 높습니다 (CLR은 적절한 경우 NRE에 대한 액세스 위반을 매핑합니다). –

답변

4
  1. 내가 할 수있는 최선의 방법이 의미,하지만 당신은 (WinDbg A-Z 참조) 읽기 위로하는 WinDbg는에 필요합니다. 거대한 학습 곡선을 가지고 있지만 익숙해지면 정말 유용합니다.

  2. tinyWRAP.dll의 디버그 정보로로드되도록 WinDbg를 구성해야합니다. 이 파일의 개발자라고 가정 할 때 tinyWRAP.PDB라는 파일이 있어야합니다. File-> Symbol Path를 열고 필요에 따라 추가하십시오.

  3. Microsoft는 자체 바이너리 용 심볼 서버 (즉, PDB 파일)를 지원합니다. 이 "경로"를 WinDbg 기호 서버 경로에 추가하면 WinDbg는 MS에서 찾을 수있는 것이면 모두 다운로드합니다. SRV * C : \ SymbolServer \ symserver * http : //msdl.microsoft.com/download/symbols

  4. 액세스 위반은 프로그램이해서는 안되는 힙 메모리에 액세스하려고한다는 것을 의미합니다. 즉, 다른 프로세스에 할당 된 메모리. 당신이 먼저 역 참조하지 않고 정수에 대한 포인터에 대한 연산을 수행하는 경우

는 예를 들어, 당신은 프로세스에 대한 액세스 권한이 없을 수 있습니다 다른 위치에 변수를 가리키는 될 겁니다.

순전히 관리되는 프로그램에서이 사실을 거의 볼 수 없지만 네이티브 DLL 또는 코드와 상호 작용하는 경우에는 상황에 대한 힌트를 얻을 수 있습니다.

+0

액세스 위반이 프로세스가 다른 프로세스의 메모리를 처리하려고한다는 것을 의미하지는 않습니다. 각 프로세스에는 자체 주소 공간이 있습니다. 할당되지 않은 주소 나 액세스 할 수없는 주소 (예 : null 용으로 예약 된 주소)에 액세스하려고하면 액세스 위반이 발생합니다. –

+0

'거대한 학습 곡선'에 대한 답변과 +1이 좋습니다! –

관련 문제