2017-03-02 19 views
0

私は次のワークフローを持っています:なぜデバッグシンボルが間違っていますか?

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 

は、私がこのような状況で間違ったデバッグシンボルを得たことをどのようにそれを可能に実行しますか?

+0

あまりにも情報が少なすぎ、あまりにも曖昧です。いくつかの具体的な出力を投稿できますか? ChkMatchの正確な出力は何ですか、WinDbgの正確な警告テキストは何ですか?シンボルパスとは何ですか?両方のツールが実際に同じファイルを使用していますか? 'lm'、' .symopt'、 '.sympath'の出力をWinDbgにポストします。通常、WinDbgは一致しないシンボルをロードしません。もしあなたが既に何かを "微調整"していたら –

+0

オッケー、今は別の質問のように見える –

+0

あなたが質問に追加したことは、私が心に留めていたことを確認します。私は今あなたの質問に、より自信をもって答えることができます。+1をフォローアップして必要な情報を提供するために –

答えて

1

RTPLogic.dll!CSRTPStack::Finalizeのシンボルは正しいですが、コールスタックを再構築するために必要なその他のシンボルは正しくありません。呼び出しスタック上にいくつかのオペレーティングシステムメソッドがあり、ntdllなどのシンボルが存在しない可能性があります。

ChkMatchでは1つのPDBファイルのみをチェックしているため、ChkMatchの結果は(多くのPDBの)WinDbgの信頼性と正確さ(1つのPDB)であり、互いに矛盾しません。

sympathには、自分のDLLへのローカルパスのみが含まれており、Microsoftのシンボルサーバーに関する情報は含まれていない可能性があります。 (あなたが投稿していなかった).sympathの出力では、私はHow to set up symbols in WinDbgで説明したようにあなたは、同様にマイクロソフトのシンボルが含まれている必要があり

0:000> .sympath 
D:\Work\path_to_dll 

のようなものを見ることを期待しています。 、

.symfix+ c:\symbols 
.reload /f 

.sympathの出力が完了しましたコールスタックを再構築するにはWinDbgのを助けるべきである

0:000> .sympath 
D:\Work\path_to_dll;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

次のようになります。ntdllと他のOSのメソッドを解決:問題を解決するには、次のコマンドを使用しますしたがって、「間違ったシンボル」メッセージを取り除くことができます。

関連する問題