web-dev-qa-db-ja.com

_NT_SYMBOL_PATH形式

Windbgをもっと使用しようとしていますが、シンボルキャッシュに問題があります。文字列の形式がどうあるべきかは私にはわかりません。

私にはいくつかの要件があります:

  • microsoftのサーバーを使用する http://msdl.Microsoft.com/download/symbols
  • \\ foo\Build1234にアーカイブされているソフトウェアのシンボルを使用する
  • c:\ dev\symbolsでローカルキャッシュを使用します

\\ foo\Build1234にある分散ビルドからのシンボルのアーカイブは、シンボルサーバーとして編成されていません。正しく理解できれば、cacheキーワードを使用する必要があります。

これらの要件を考えると、これは適切にフォーマットされたsrvpathのように見えますか?

cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.Microsoft.com/download/symbols

編集:

Advanced Windows Debuggingを読み始めたばかりで、cacheキーワードがどのように機能するかを誤解していました。これは、フォルダーが単なるファイルのフォルダーであり、シンボルサーバーではないことをデバッガーに伝える方法だと思いました。 Michaelがコメントを残した後、セクションを読み直して、Michaelが説明したように実際に機能することを確認しました。

今、私はあなたが;を使うとき混乱しています。または*でパス/ URLを区切ります。また、srv *プレフィックスが必要な場合。 windbgのオンラインヘルプでは、次の例を示しています。

\\someshare\that\cachestar\ignores;srv*c:\mysymbols*http://msdl.Microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached

\\ someshareのシンボルはキャッシュされず、Microsoftのシンボルはc:\ mysymbolsにキャッシュされ、c:\ mysymbolsは、cache *ディレクティブの右側にある他のパスのキャッシュとして使用されます。

Srv *をときどき使用すると、混乱します。最初と最後のパスの前にsrv *が付いていない理由がわかりません。

編集2:

これはゆっくりと私には意味をなし始めています。 srvディレクティブは、通常のシンボルディレクトリではなく、シンボルサーバーに使用されます。だから、私の最初の質問への答えはこれだと思います:

\\foo\Build1234;cache*c:\dev\symbols;srv*http://msdl.Microsoft.com/download/symbols
30
criddell
SRV*C:\dev\symbols*http://msdl.Microsoft.com/download/symbols;\\foo\build1234

\\foo\build1234が単なるフラットPDBの場合、正常に動作するはずです。ここではキャッシュは必要ありません。シンボルパスにディレクトリを追加するだけです。

Cacheキーワードは、シンボルファイルをキャッシュする場所を指定し、インデックス付けされていない共有(\\foo\build1234など)からローカルにシンボルをキャッシュする場合に役立ちます。

cache*C:\dev\symbols;SRV*C:\dev\symbols*http://msdl.Microsoft.com/download/symbols;\\foo\build1234

上記のパスは、MSのシンボルサーバーからのシンボルとシンボル共有をC:\ dev\symbolsのローカルマシンに格納します。

Windbgを使用してシンボルの問題をデバッグするには、

!sym noisy
.reload <some exe or DLL in your session>

次に、PDBを強制的にロードするアクションを実行します。 windbgがファイルを探している場所と、PDBを拒否した場合はその理由がわかります。

!sym quiet

その後、シンボルプロンプトを抑制します。

38
Michael

シンボルの読み込みに関するデバッグの問題に関する詳細な投稿は次のとおりです。

Windbgにシンボルをロードしています

2
user1573932