Windows用デバッグツール を使用しています。WinDbg/ cdbまたはntsdを起動すると、次のエラーメッセージが表示されます。
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
任意のコマンドを実行すると、エラーメッセージも表示されます
*** ERROR: Module load completed but symbols could not be loaded for <module>.<ext>
そして、以下は関連しているようです:
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y <symbol_path> argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
!analyze -v
でも見ました
DEFAULT_BUCKET_ID: WRONG_SYMBOLS
そして
*************************************************************************
*** ***
*** Either you specified an unqualified symbol, or your debugger ***
*** doesn't have full symbol information. Unqualified symbol ***
*** resolution is turned off by default. Please either specify a ***
*** fully qualified symbol module!symbolname, or enable resolution ***
*** of unqualified symbols by typing ".symopt- 100". Note that ***
*** enabling unqualified symbol resolution with network symbol ***
*** server shares in the symbol path may cause the debugger to ***
*** appear to hang for long periods of time when an incorrect ***
*** symbol name is typed or the network symbol server is down. ***
*** ***
*** For some commands to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*************************************************************************
WinDbgを設定してシンボルを見つけるにはどうすればよいですか?
免責事項:これは、 windbg のすべての間違ったシンボル投稿に対する正規の質問であることを意図しています。
シンボルはさまざまな方法で正しくセットアップできます。
警告:ここの例では\\server\symbols
を使用します。これは通常、利用できないネットワークストレージです。ローカルサーバーに適合させるか、お持ちでない場合はその部分を完全に省いてください。存在しないサーバーは遅延などを引き起こす可能性があります。
Microsoftが提供するシンボル用に新しいフォルダーc:\symbols
を作成します。次に入力
.symfix+ c:\symbols
.reload
(または必要に応じてreload -f
)
インターネットに接続していることを確認してください。これにより、Microsoftサーバーに接続し、そこからシンボルをダウンロードします。
ケースの80%以上で、これはすでにシンボルの問題を解決している可能性があります。そうでない場合は、読み進めてください。
WinDbgは、シンボルパスに表示される順序でシンボルを検索します。したがって、ローカルシンボルを最初に配置し、次に会社のローカルネットワーク共有を配置してから、インターネットからシンボルをダウンロードし、コピーをローカルに保存することをお勧めします。
.sympath c:\mysymbols ; *** Symbols of your application, locally, flat list of PDB files
.sympath+ cache*c:\symbolcache ; *** (optional) Create a cache for everything
.sympath+ \\server\symbols ; *** Symbols provided from a network share
.symfix+ c:\symbols ; *** Microsoft symbols
WinDbg(コマンドラインではない)では、File/Symbol File Path...
を押すか、または Ctrl+S。次の形式で入力します
c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.Microsoft.com/download/symbols
WinDbgは、異なるシンボルパス設定で異なるデスクトップリンクを使用する場合、-y
コマンドラインスイッチも使用します。
WinDbg -y "<symbol path>"
ここには完全なパスが必要です。これは次のような形式です
c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.Microsoft.com/download/symbols
_NT_SYMBOL_PATH
という環境変数があり、シンボルパスにも設定できます。次の構文を使用します。
c:\mysymbols;cache*c:\symbolcache;\\server\symbols;SRV*c:\symbols*http://msdl.Microsoft.com/download/symbols
WinDbgがこの変数を評価するだけでなく、Visual Studio、Process Explorer、Process Monitor、その他のソフトウェアも評価することに注意してください。この環境変数を設定すると、パフォーマンスに影響が出る場合があります。
複数のパスを含むかなり複雑なシンボルセットアップがある場合は、 WinDbgワークスペースの概念 に精通してください。
ワークスペースを使用すると、シンボルパスを保存できるため、すべてのデバッグセッションですべてのコマンドを再入力する必要がありません。
ワークスペースに満足したら、WinDbgのリンクを作成して-Q
を含めます。これは、「迷惑な「ワークスペースを保存しますか?」という質問を抑制します」という意味です。
これまでのところ、Base
ワークスペースの一部としてシンボルを保存できたことを非常に嬉しく思います。
遅延シンボル(lm
コマンド中にそのように示される)は問題ではありません。 WinDbgは必要なときにそれらをロードします。すべてを強制的にロードするには、次を入力します
ld*
シンボル(PDB)が期待どおりに機能しない場合は、
!sym noisy
シンボルを解決するときにWinDbgが正確に実行していることに関する詳細情報を取得する。
解決策が見つかったら、それをオフにします
!sym quiet
個々のシンボルの正確性を確認するには、WinDbgに付属のsymchk
ツールを使用できます。
Symchk /if <exe> /s <symbol path> /av /od /pf
/if = input is a file
/s = symbol file path
/od = all details
/av = verify
/pf = check if private symbols are available
または ChkMatch を取得します。これは少し使いやすいです
ChkMatch -c <exe file> <pdb file>
ネットワーク共有からシンボルにアクセスできない場合は、事前にネットワーク共有にログオンしてください。 AFAIR、WinDbgは資格情報を要求しません。
Microsoft Symbol Serverを使用してデバッグシンボルファイルを取得 (should redirect here しかし、リダイレクトは現在壊れています)