我有下一个工作流程:为什么我得到错误的调试符号?
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用于跟踪并提供必要信息 –