Windbg Dr. Watson Minidump- 원래 설치된 버전을 위해 구축 된 PDB/DLL이 필요합니까?

StackOverflow https://stackoverflow.com/questions/134866

문제

대상의 응용 프로그램 충돌로 인한 MindMP 파일이 있습니다. 소프트웨어 버전의 DLL/PDB 파일을 재건하고 WindBG로드 기호를 올바르게 할 수 있습니까?

내 문제는 PDB 파일이 주요 릴리스에만 보관된다는 것입니다 (불행히도). 이것은 매일 빌드로 스스로를 재건 할 수 있지만 오류가 발생합니다.

with! sym noisy on : "이미지 헤더는 메모리 이미지 헤더와 일치하지 않습니다."

DBGENG:  C:\...\XXX.dll image header does not match memory image header.
DBGENG:  XXX.dll - Partial symbol image load missing image info
DBGHELP: Module is not fully loaded into memory.
DBGHELP: Searching for symbols using debugger-provided data.
DBGHELP: C:\...\XXX.pdb - mismatched pdb

참고 DLL을 사용하여 PDB를 빌드하고 동일한 릴리스 디렉토리에서 나온 것입니다 (디버그를 작성해야합니까?)

릴리스 빌드 (릴리스 빌드가 대상에 설치되고 충돌)가 릴리스 된 빌드입니다. 디버그 빌드 DLL을 사용하여 더 많은 기호 정보를 얻을 수 있어야합니까?

도움이 되었습니까?

해결책

내 경험상 아마도 그렇지 않을 것입니다.

정확한 빌드 디렉토리가 있고 똑같습니다 컴파일러 설정은 작동 할 수 있습니다. 릴리스 충돌 덤프에 대한 디버그 빌드에서 기호를로드 할 수 없습니다.

WINDBG가 타임 스탬프 차이를 무시하기 위해 'ally ally'옵션을 켜야합니다.

다른 팁

그만큼 chkmatch 유틸리티는이 정확한 시나리오를 위해 설계되었습니다. 원래 .exe가있는 한 소스 (동일한 컴파일러 및 컴파일러 설정 포함)를 다시 컴파일하고 이전 .exe와 일치하도록 새 .pdb를 패치 할 수 있습니다.

이 예에서 OriginAlExecutable.exe 더 이상 .pdb 파일이없는 실행 파일이며 rebuiltpdb.pdb 원래 소스를 재건함으로써 제작 된 것입니다.

chkmatch -m OriginalExecutable.exe RebuiltPDB.pdb

이제 두 파일에 원래 이름이있는 한 디버거는 일치하는 쌍으로 받아 들여야합니다.

여전히 정확한 소스 코드가있는 경우 이미지가 컴파일 된 다음 새 PDB 파일을 생성 한 다음 WindBG에 충돌 덤프를 열 때이 PDB를 강제로로드하도록 지시합니다. 연습에서 한 번 작동했습니다.

PDB 파일은 Guid와 "Age"(시퀀스 번호)에 의해 EXE 파일에 묶여 있습니다. 이들은 EXE와 PDB에 내장되어 있습니다. 가이드는 각 완전한 빌드에서 재생되며 각 증분 빌드에서 "연령"이 변경됩니다.

디버거는이를 사용하여 EXE 파일의 올바른 PDB를보고 있는지 확인합니다.

Steveman이 언급 한 "CHKMATCH"도구에 대해 몰랐지만 GUID/AGE를 패치하여 일치하도록 작동한다고 생각합니다.

이것은 Doug를 도울 수 없지만이 질문을 발견하는 사람을 위해 다른 스레드 (다른 스레드) (Visual Studio에서 불일치 기호를로드 할 수 있습니까?) WINDBG가 불일치 .pdb 파일을 수락하는 방법을 지적했습니다.

.symopt_0x40
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top