我有下一個工作流程:爲什麼我得到錯誤的調試符號?
1)生成dll和pdb文件。
2)共享DLL來CUTOMER
3)從客戶Analize存儲器轉儲。
當我運行在WinDbg
我!analyze -v
(下輸出的一部分)
....
MANAGED_STACK_COMMAND: _EFN_StackTrace
PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS
BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS
// some callstack here
MODULE_NAME: RTPLogic
IMAGE_NAME: RTPLogic.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 58a43706
STACK_COMMAND: ~541s; .ecxr ; kb
FAILURE_BUCKET_ID: WRONG_SYMBOLS_c0000374_RTPLogic.dll!CSRTPStack::Finalize
BUCKET_ID: X64_APPLICATION_FAULT_WRONG_SYMBOLS_rtplogic!CSRTPStack::Finalize+1da
看起來我們有錯誤調試符號爲RTPLogic.dll
。 我下載了ChkMatch
工具。 我從windbg
0:541> !lmi RTPlogic.dll
Loaded Module Info: [rtplogic.dll]
Module: RTPLogic
.....
Age: 1, Pdb: D:\Work\path_to_original_pdb\RTPLogic.pdb
Image Type: MEMORY - Image read successfully from loaded memory.
Symbol Type: PDB - Symbols loaded successfully from image header.
C:\ProgramData\dbg\sym\RTPLogic.pdb\9F82CDF359044635ADEBA578CA1D1D031\RTPLogic.pdb
Compiler: Resource - front end [0.0 bld 0] - back end [9.0 bld 21022]
Load Report: private symbols & lines, not source indexed
C:\ProgramData\dbg\sym\RTPLogic.pdb\9F82CDF359044635ADEBA578CA1D1D031\RTPLogic.pdb
我有與此相關的轉儲日誌中獲取的PDB路徑和我看到我的變化出現在日誌中。所以客戶在獲取memdump之前不會忘記安裝我的DLL。 我跑ChkMatch
PS D:\tools> .\ChkMatch.exe -c "D:\Work\path_to_dll\RTPLogic.dll" "C:\Progra
mData\dbg\sym\RTPLogic.pdb\9F82CDF359044635ADEBA578CA1D1D031\RTPLogic.pdb"
.....
Result: Matched
怎麼可能,我在這樣的情況下得到了錯誤的調試符號?
這些信息太少,太模糊。你能發佈一些具體的輸出嗎? ChkMatch的確切輸出是什麼,WinDbg中的確切警告文字是什麼。什麼是符號路徑?這兩種工具是否真的使用相同的文件?在WinDbg中輸出'lm','.symopt'和'.sympath'的輸出。通常WinDbg根本不加載不匹配的符號。如果是這樣,你已經「調整」了一些東西 –
好吧,但現在看起來像不同的問題 –
你添加到問題中的內容證實了我的想法。我現在可以更自信地回答你的問題。+1用於跟蹤並提供必要信息 –