windows - WinDbg Dr. Watson minidump-需要最初為安裝的版本生成的pdb/dll?



debugging dr.watson (4)

在我的經驗可能不是。

如果你有確切的編譯目錄,並使用完全相同的編譯器設置來編譯,那麼這可能工作。 您肯定無法從調試版本中加載符號來對付發布故障轉儲。

您將需要打開“加載任何”選項:.symopt + 0x40讓windbg忽略時間戳差異。

我有一個目標的應用程序崩潰mindmp文件。 我有可能重建一個版本的軟件的dll / pdb文件,並正確windbg加載符號?

我的問題是,我們的pdb文件只保留主要版本(不幸)。 這是一個每天構建,我可以重建我自己,但我越來越絆倒在錯誤。

使用!sym嘈雜:“圖像標題與內存圖像標題不匹配”。

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,它們來自同一個RELEASE目錄(我應該構建調試嗎?)

這些是發布版本(因為發布版本安裝在目標和崩潰)我應該以某種方式使用調試版本DLL獲取更多的符號信息?


Answer #1

ChkMatch實用程序專為此確切場景而設計。 只要你有原始的.EXE,你可以重新編譯源代碼(使用相同的編譯器和編譯器設置)並修補新的.PDB以匹配舊的.EXE。

在這個例子中, OriginalExecutable.exe是不再具有.PDB文件的可執行文件,而RebuiltPDB.pdb是通過重建原始源文件生成的。

chkmatch -m OriginalExecutable.exe RebuiltPDB.pdb

現在,只要這兩個文件有它們的原始名稱,調試器應該接受它們作為匹配對。


Answer #2

如果你仍然有確切的源代碼的圖像編譯,然後重新生成一個新的pdb文件,然後指示WinDbg強制加載這個pdb當你打開崩潰轉儲 - 它在我的實踐中曾經工作過一次。






dr.watson