2016-06-28 1 views
8

documentationは言う:WinDbg SRVのドキュメントは間違っていますか?

あなたのシンボルパスの文字列のSRV *が含まれている場合、デバッガはデフォルトのシンボルストアからのシンボルを取得するためにシンボルサーバーを使用しています 。 の例の場合、次のコマンドは、シンボル を使用してデフォルトのシンボルストアからシンボルを取得するようにデバッガに指示します。 これらのシンボルは、ローカルコンピュータにキャッシュされていない です。

.sympathのSRV *

しかし私が見つけたシンボルキャッシュされています。

私はWinDbgの10を使用していますが、デフォルトのキャッシュファイルは、私はそれらを削除し、シンボルはここからダウンロードしているsrv*に設定されたパスと実行可能ファイルを実行するとC:\Program Files (x86)\Windows Kits\10\Debuggers\x86\symで作成されているように見えます。

ドキュメントは間違っていますか?

+0

少なくともあなたの解釈はあなたによって間違って証明されています。 –

答えて

5

はい、ドキュメントは間違っています(少なくともWinDbg 6.2.9200.16384では)。

あなたが言及したコマンドを入力することによって、それを証明することができます。私たちはWinDbgのの出力からわかるように、(実際に使用されます)、拡張シンボルパスがそのシンボルを示しcache*が含まれている、だから、

0:000> .sympath srv* 
Symbol search path is: srv* 
Expanded Symbol search path is: cache*;SRV*http://msdl.microsoft.com/download/symbols 

をキャッシュされます。

documentation for WinDbgでこれが見つかりました。これは、WinDbgがシンボル自体を読み込まないため、動作を定義する正しい場所ではない可能性があります。代わりにdbghelp.dllが使用され、WinDbgのヘルプを更新せずにそのDLLの動作が変更される可能性があります。


シンボルパスの構文は使い慣れていないため、ドキュメントはすべての場所に広がっています。拡張ディレクトリとデフォルトディレクトリを持つすべての魔法はそれをさらに悪化させます。

流れがより以下である:

  1. 分割でシンボルパス ";"配列に配列します。各要素の要素については
    1. "キャッシュ*":
      1. スイッチ要素の初めに応じ
        1. キャッシュパスを決定します。
          1. アスタリスクの後のパスは、そのパスを使用します。
            それ以外の場合は、デフォルトのキャッシュパスを使用します。
          2. 以下のすべてのキャッシュシンボル要素がこのパスにあります。
      2. "symsrv *":
        1. スプリット(ほとんどパス)成分に "*" で要素
        2. 最初のコンポーネントは、使用するシンボルサーバーDLLです。
        3. 次のコンポーネントはパスです。 パスにおけるシンボルの
          1. ルック:各パスください。パスは、
            • のいずれかのローカルディレクトリです。
            • UNC。
            • HTTPまたはHTTPSのURL - は、最後のパスである必要があります。
            • 空の文字列 - デフォルトのシンボルストアを意味します。 (SymSetHomeDirectory!homedirを参照してください。)見つけ
          2. の場合:この要素すべて以前パス sの
            1. コピーシンボル。
      3. "のSRV *"
      4. 完了シンボル検索:として
        • 同じ "symsrv * symsrv.dll *"。
        • そうでない場合は
        1. はパスとして要素を扱い、そこにシンボルを探します。 (symsrv.dllによって行われたようなハッシュなどなし。)
+0

が意味するところは、このメッセージであっても、「DBGHELP:Symbol Search Path:cache *; SRV * https:// msdl.microsoft.com/download/symbols」も 'cache'を表示しますが、 'srv *'は特別なパスシンボルそのものですか? – zar

+0

@zar:私の更新された答えを見てください。それは役に立ちますか? –

+0

''シンボルパス構文は本当に使いにくいです ''と完全に同意します。非常に混乱し、意味やバリエーションが多すぎます。 – zar

1

WinDbgシンボルパスにspecial cache*path tokenを使用すると、WinDbgはそのトークンに続くソースのシンボルをキャッシュします。 serverpathからlocalpathまでのキャッシュシンボルにはsrv*localpath*serverpathと書くこともできます。キャッシングが必要ない場合は、.sympathにキャッシングが含まれていないことを確認してください。

また、シンボルが効果的にキャッシュされているか(一度だけフェッチされたか、何度も再利用されたか)、このWinDbgの実行に格納されているかどうかを調べることは価値があります。

+0

これは基本的にキャッシュされ、一度だけフェッチされ、永遠にそこにとどまります。その後の '.reloads'は高速です。このフォルダーの内容を削除すると、 '.reload'は実際にシンボルをフェッチするときに遅くなります。 – zar

関連する問題