私は次のワークフローを持っています:なぜデバッグシンボルが間違っていますか?
1)DLLとPDBファイルをビルドします。
3をcutomerする
2)共有DLL)顧客からのメモリダンプをAnalize。私は(出力の一部の下に)私が得たWinDbg
で!analyze -v
を実行すると、我々はRTPLogic.dll
のために間違ったデバッグシンボルを持っているよう
は
....
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
が見えます。 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のパスを取得し、私は私の変更がログに表示されていることがわかります。だから、顧客は私のDLLをインストールする前にmemdumpを取得するのを忘れていない。 私は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の正確な警告テキストは何ですか?シンボルパスとは何ですか?両方のツールが実際に同じファイルを使用していますか? 'lm'、' .symopt'、 '.sympath'の出力をWinDbgにポストします。通常、WinDbgは一致しないシンボルをロードしません。もしあなたが既に何かを "微調整"していたら –
オッケー、今は別の質問のように見える –
あなたが質問に追加したことは、私が心に留めていたことを確認します。私は今あなたの質問に、より自信をもって答えることができます。+1をフォローアップして必要な情報を提供するために –