2009-06-08 13 views
26

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

私はいくつかの要件があります:Cでローカルキャッシュを使用

  • 使用マイクロソフトのサーバーのfoo \\でアーカイブされている当社のソフトウェアからhttp://msdl.microsoft.com/download/symbols
  • 使用シンボル\ Build1234
  • を:\ DEV \シンボル

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

これらの要件を考えると、これは適切にフォーマットsrvpathのように見えるん:

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

編集:私はちょうど高度なWindowsのデバッグを読み始め、キャッシュキーワードがどのように働くか、私が誤解していた

。私はそれがデバッガに、フォルダがシンボルサーバではなくファイルのフォルダであることを伝える方法だと思っていました。マイケルがコメントを残した後、私はセクションを再度読んで、それが実際にマイケルが説明したように動作することを確認します。

今、私はあなたを使うときに混乱します。パス/ URLを区切るには*を使用します。そして、srv *プレフィックスが必要なとき。 \ mysymbols、およびC:\\ someshareから

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

シンボルは、マイクロソフトからのシンボルがCにキャッシュされ、キャッシュされません:\ mysymbolsはのためのキャッシュとして使用されているWinDbgのためのオンラインヘルプでは、彼らはこの例を与えますcache *ディレクティブの右側にある他のパス。

時々srv *を使用すると混乱します。なぜ最初と最後のパスにsrv *が付いていないのかわかりません。

編集2:

これはゆっくりと私には意味を作るために始めています。 srvディレクティブはシンボルサーバで使用され、通常のシンボルディレクトリでは使用されません。 \\foo\build1234はちょうどフラットPDBのであれば、正常に動作する必要があります

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

関連:[WinDbgの内のシンボルを設定する方法](https://stackoverflow.com/questions/30019889/how-to-set-up-symbols-in-windbg) –

答えて

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

:だから、私は信じて私の元の質問への答えはこうです。キャッシュはここでは必要ありません。シンボルパスにディレクトリを追加するだけです。

キャッシュキーワードは、あなたのシンボルファイルをキャッシュする場所を指定し、

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

上記のパスは、MSのシンボルサーバーからシンボルを格納します(\\foo\build1234のような)非インデックス付き株式からローカルにキャッシュするシンボルのために有用ですC:\ dev \ symbolsでシンボルをローカルマシンに共有します。その後、windbgのを使用してデバッグシンボル問題へ

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

を行うと、ロードするPDBを強制するいくつかのアクションを実行します。 windbgがファイルを探している場所と、PDBが拒否した理由を確認できます。

!sym quiet 

シンボルプロンプトが表示されなくなります。

+0

シンボルを有します問題は、私は常に ".reload -f -a"を使用します。 – LanceSc

+0

マイケルに感謝します。あなたの答えは正しいです。私が実際にやったことはやや異なっています。 \\\ foo \ build1234をパスの先頭に置いて、決してキャッシュされないようにし、すべてのものに使用したいグローバルキャッシュを指定してから、Microsoft URLを追加しました。こうすることで、デバッグ中に追加した追加のパスは、グローバルキャッシュを使用します。これは、これを動作させたい方法です。ありがとう。 – criddell