상황입니다 :도움말 postmorten 디버깅 Win32 응용 프로그램 여기
배경
나는 혼합 모드 .NET/네이티브 응용 프로그램을 Visual Studio에서 개발 한 내 말은 무엇 2008 년
혼합 모드는 프런트 엔드가 C++ .NET으로 작성되어 네이티브 C++ 라이브러리를 호출한다는 것입니다. 네이티브 코드는 새로운 스레드를 필요에 따라 시작하는 등 응용 프로그램에서 대부분의 작업을 수행합니다. .NET 코드는 UI 용도로만 사용할 수 있습니다 (양식 획득).
테스터의 컴퓨터에서 실행중인 응용 프로그램의 릴리스 빌드가 있습니다.
기본 라이브러리는 완전한 최적화로 컴파일되었지만 디버깅이 가능하도록 컴파일되었습니다 ("디버그 정보 형식"이 "프로그램 데이터베이스"로 설정 됨).
이것이 의미하는 바는 PDB 파일의 응용 프로그램에 대한 디버깅 기호가 있음을 의미합니다.
문제
어쨌든, 테스터 중 하나는 가끔 XP에 충돌 응용 프로그램에 문제가있다. 나는 왓슨 박사를 여러 번 사용하여 충돌 사고의 미니 덤프를 얻을 수있었습니다.
미니 덤프를 사용하여 디버깅 할 때 (실제 앱을 실제로 디버깅하지는 않음) 모든 디버깅 기호가 올바르게로드됩니다. 모든 원시 스레드의 전체 스택 추적을 올바르게 볼 수 있습니다. 다른 스레드 (아마도 .NET 스레드)는 스택 추적을 가지고 있지 않지만, 적어도 스레드가 시작된 dll (즉, ntdll.dll)을 보여줍니다. 내가 스레드에 갈 때 유용 아무것도 표시되지 않습니다
.
그것은 제대로 (액세스 위반 읽기 위치를 0x00000000 :가 0xc0000005 (5) 된 .dmp 사용자의 0x0563d652에서 "처리되지 않은 예외) 실패 스레드를보고합니다. 스택 추적에는 메모리 주소가 "0563d652()"(심지어 "ntldll.dll"이 아님) 인 단일 항목이 있습니다.
dissasembly에 들어가면 약 30 개의 명령어가 무작위로 표시됩니다. 메모리 주소의 양쪽은 그냥 "???"입니다. 내 소스 코드의 일부가 아닌 것처럼 보입니다. (바이너리가 메모리에 순차적으로로드되지 않습니까? 미 아무데도 안 되니?).
내 질문에
은 그래서 기본적으로 내 질문 threfold된다.
1) 누구든지 디버거의 정보 부족을 설명 할 수 있습니까? 마음에 베어링
2), 나는 나를이 현재의 문제를 진단하기 위해 다른 작업을 수행 할 수) 사람이 실패
3에 대한 이유를 제안 할 수 있습니다, 오류가 내 코드에서 발생 표시 할 수 없습니다 미래?
도움말!
존
업데이트 : 여기
이
# ChildEBP RetAddr
WARNING: Frame IP not in any known module. Following frames may be wrong.
00 099bf414 02d0e7fc 0x563d652
01 00000000 00000000 0x2d0e7fc
이상한 허 WinDBG로
에서 실패한 스레드에 대한 스택 덤프는? 심지어 DLL을 표시하지 않습니다.스택/힙이 손상되어 스레드가 손상된 것일 수 있습니다 ...?
아니요, Visual Studio 2008 통합 디버거를 사용하십시오. 나는 WinDbg를 시도해 보겠다 - 좋은 제안, 고마워. – John
WinDBG와 동일한 결과가 나타납니다. SOS의 경우 미니 덤프 대신 전체 덤프를 사용하는 것이 좋습니다. 내가 덤프를 시도해 볼 수 있는지 알 겠어. – John
글쎄, 미니 덤프는 어떤 의미에서 풀 덤프가 될 수도 있습니다 - 생성 된 옵션에 달려 있습니다. 게다가, windbg를 사용하는 것은 항상 좋은 생각입니다 o) – deemok