1. 靜態檢查
windbg 除錯工具包中有一個工具symchk.exe, 選項很多, 下面一個簡單的用法可以檢查一個 test.exe能不能找到與它匹配的PDB:
這是成功的情形. 下面來個失敗的作為對比:
2. 如果已經在windbg內部, 可以透過下面的命令檢查
最後一行說 MATCH, 肯定沒問題.
3. 在windbg中(在VS中不行), 如果你100%確信原始碼沒有任何改動, 只不過被重新編譯了一下.
可以透過 .symopt +40 來關閉對GUID的強行檢查. 從而load一個不匹配的PDB.
4. 除了1中提到的工具, 還有一個叫chkmatch 的工具, 在
http://www.debuginfo.com/download/chkmatch.zip
可以下載, 該工具不僅可以檢查是否匹配, 還可以把不匹配的強制改為匹配, 也就是說EXE/DLL和PDB中的GUID相同, 這樣在VS中就可以使用了, 當然, 高度危險, 後果自負.
透過 ChkMatch.exe (DebugInfo.com - ChkMatch tool) 工具來確認二進位制檔案和pdb是否匹配。
命令列:ChkMatch.exe -c ExeFile DebugInfoFile
ExeFile 表示 二進位制檔案
DebugInfoFile 表示 符號檔案
例如:
ChkMatch.exe -c chrome.dll chrome.dll.pdb
上面的Matched表示匹配。
上面的Unmatched表示不匹配,並攜帶原因。
同時都會列印出
二進位制檔案的時間戳、格式、簽名和年齡等資訊
pdb的格式型別、簽名和年齡等資訊
chkmatch.exe的詳細資料參考: https://www.debuginfo.com/tools/chkmatch.html
參考資料:
https://www.cnblogs.com/budapeng/p/3795140.html
https://blog.csdn.net/zsc_976529378/article/details/136529769