내 애플리케이션에서 응용 프로그램이 충돌 할 때마다 MiniDumpWriteDump 함수 (dbghelp.dll 참고)를 사용하여 크래시 덤프 파일을 작성합니다.Symbol Server에 정확한 버전의 Windows DLL을 설치하지 않은 채 사기 충돌 덤프 디버깅
고객이 내게 크래시 덤프 파일을 보낼 때마다 디버거가 자동으로 실행 파일과 디버그 정보의 올바른 버전을 선택하도록 심볼 실행 서버를 사용하여 모든 실행 파일과 pdb 파일을 저장합니다.
또한 SymChk를 사용하여 Windows DLL (ntdll.dll, kernel32.dll, ...) 및 해당 디버그 정보를 심볼 서버에 저장합니다. 디버그 정보는 Microsoft의 공용 기호 서버에서 가져옵니다.
이 완벽하게 작동하는 대부분의 시간, 경우를 제외하고 :
- 중 하나에서 고객의 충돌 윈도우 DLL의
- 와 고객은 DLL의 나는 기호 서버에 넣어되지 않은 것을 사용
Symbol Server에 모든 Windows DLL의 모든 맛을 저장하는 것은 상당히 취소 할 수 없기 때문에 (특히 주간 패치가있는 경우) 특히 그렇습니다.
따라서 고객이 NTDLL.DLL 버전 5.2.123.456을 충돌 시키면이 정확한 버전의 DLL을 내 Symbol Server에 넣지 않은 것입니다. Microsoft의 공용 기호 서버조차도 DLL 자체가 아니라 디버그 정보 만 제공하기 때문에 도움이되지 않습니다.
현재의 솔루션은 고객에게 DLL을 요청하는 것이지만 항상 쉬운 것은 아닙니다. 따라서 더 나은 솔루션을 찾고 있습니다.
올바른 버전의 DLL이 없어도 정확한 호출 스택을 표시하는 디버거를 얻거나 특정 DLL의 디버그 정보를로드하는 방법이 있습니까?
다른 방법으로 모든 (또는 중요한) Windows DLL (Microsoft)의 모든 버전을 구할 수 있습니까?
편집 : 나는이 문제를 해결하기 정말 쉬운 방법을 발견 그 동안
. 유틸리티 ModuleRescue (http://www.debuginfo.com/tools/modulerescue.html 참조)를 사용하면 미니 덤프 파일에서 더미 DLL을 생성 할 수 있습니다. 이러한 더미 DLL을 사용하면 디버거가 만족되고 Microsoft 서버에서 디버그 기호를 올바르게로드하기 시작합니다.
이 솔루션을 살펴볼 시간을 좀주세요. 이것은 꽤 문제를 해결할 수있는 것처럼 보입니다. 내 상황에서 이것이 작동하는 것으로 확인되면이를 해결책으로 표시 할 것입니다. – Patrick