WinDbg Dr. Watson minidump - требуется pdb / dll, изначально созданная для установленной версии? - PullRequest
3 голосов
/ 25 сентября 2008

У меня есть файл mindmp из-за сбоя приложения цели. Могу ли я перестроить файлы dll / pdb для версии программного обеспечения и правильно указать символы загрузки windbg?

Моя проблема в том, что наши файлы pdb хранятся только для основных выпусков (к сожалению). Это ежедневная сборка, которую я могу перестроить сам, но меня обманывают ошибки.

С! 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

Заметьте, я собрал pdb с помощью dll, они из той же директории RELEASE (я должен собирать отладку?)

Тезисы являются сборками релизов (так как сборки релизов устанавливаются на цель и происходит сбой), должен ли я каким-то образом использовать отладочные библиотеки сборки для получения дополнительной информации о символах?

Ответы [ 5 ]

11 голосов
/ 02 октября 2008

Утилита ChkMatch предназначена именно для этого сценария. Пока у вас есть оригинальный .EXE, вы можете перекомпилировать исходные коды (с теми же настройками компилятора и компилятора) и установить новую .PDB для соответствия старой .EXE.

В этом примере OriginalExecutable.exe - это исполняемый файл, у которого больше нет файла .PDB, а RebuiltPDB.pdb - это файл, созданный путем восстановления исходного источника.

chkmatch -m OriginalExecutable.exe RebuiltPDB.pdb

Теперь, если два файла имеют свои оригинальные имена, отладчик должен принимать их как совпадающую пару.

8 голосов
/ 25 сентября 2008

По моему опыту наверное нет.

Если у вас есть точный каталог сборки и сборка с точно такими же настройками компилятора , это может сработать. Вы определенно не сможете загружать символы из отладочной сборки против аварийного дампа выпуска.

Вам нужно будет включить опции «загрузить что-нибудь»: .symopt + 0x40, чтобы получить windbg, чтобы игнорировать разницу во времени.

2 голосов
/ 24 октября 2008

если у вас все еще есть точный исходный код, из которого было скомпилировано изображение, перестройте его, создав новый файл pdb, а затем поручите WinDbg принудительно загрузить этот pdb при открытии аварийного дампа - в моей практике это работало один раз.

1 голос
/ 14 октября 2008

PDB-файлы привязываются к своим EXE-файлам с помощью GUID и «возраста» (это порядковый номер). Они встроены в EXE и в PDB. GUID восстанавливается при каждой полной сборке, а «возраст» изменяется при каждой добавочной сборке.

Отладчик использует их для проверки правильности PDB для файла EXE.

Я не знал об инструменте "chkmatch", упомянутом SteveMan, но я подозреваю, что он работает, исправляя GUID / возраст, чтобы они соответствовали.

0 голосов
/ 13 января 2014

Это слишком поздно, чтобы помочь Дагу, но ради любого, кто сталкивается с этим вопросом, другой поток ( Возможно ли загрузить несовпадающие символы в Visual Studio? ) указал способ получить WinDbg для приема несовпадающих файлов .PDB

.symopt_0x40
...