[解決済み] WinDbgでシンボルを設定する方法は?
質問事項
を使っています。 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でシンボルを見つけるにはどのように設定すればよいですか?
<サブ 免責事項: この質問は、すべての 間違ったシンボル の投稿は ウィンドブレーカー .
解決方法は?
シンボルは、さまざまな方法で正しく設定することができます。
警告
: この例では
\\server\symbols
これは通常、利用できないネットワークストレージです。ローカルサーバーに合わせるか、サーバーがない場合はその部分を完全に省いてください。存在しないサーバーは、遅延などを引き起こす可能性があります。
80%のケースに対応するTLDRバージョン
新しいフォルダーを作成する
c:\symbols
マイクロソフトから提供されたシンボルのために。そして、次のように入力します。
.symfix+ c:\symbols
.reload
(または
reload -f
必要であれば)
マイクロソフトのサーバーに接続し、そこからシンボルをダウンロードするため、インターネットに接続されていることを確認してください。
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
個々のシンボルが正しいかどうかをチェックするために
symchk
というツールがWinDbgに付属しています。
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を使用します。 (本来は ここにリダイレクト が、現在リダイレクトが壊れています)
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] pg_stat_activityの使い方は?
-
[解決済み] コンテンツとともに保存されたchrome network debugger harファイルを表示/再生するにはどうすればよいですか?
-
[解決済み] プログラム「[3984] dotnet.exe」がコード -2147450751 (0x80008081) で終了しました。
-
[解決済み】IntelliJに「Break on Exception」はあるのか?
-
[解決済み】Windowsの.exeを「デコンパイル」することは可能ですか?または少なくともアセンブリを表示することはできますか?
-
[解決済み】実行中のJavaプロセスにIntelliJ IDEAのデバッガをアタッチする。
-
[解決済み】デバッガでステップインツーとステップオーバーの違いは何ですか?
-
[解決済み】拡張機能のbackground.jsのコンソールやdevtoolsにアクセスする。
-
[解決済み] WinDbgでSOSを読み込めない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rのデバッグ。"負の添え字と混在できるのは0のみ"
-
[解決済み] ScriptedSandbox64.exe が動作しなくなった - Visual Studio 2015
-
[解決済み] pg_stat_activityの使い方は?
-
[解決済み] Elixirで関数の呼び出し元をリストアップする方法は?
-
[解決済み] プログラム「[3984] dotnet.exe」がコード -2147450751 (0x80008081) で終了しました。
-
[解決済み] [Solved] 失敗した `docker build` のファイルシステムを検査するにはどうしたらいいですか?
-
[解決済み】Windowsの.exeを「デコンパイル」することは可能ですか?または少なくともアセンブリを表示することはできますか?
-
[解決済み】実行中のJavaプロセスにIntelliJ IDEAのデバッガをアタッチする。
-
[解決済み】Visual Studio C++で、メモリ割り当ての表現とは何ですか?
-
[解決済み】拡張機能のbackground.jsのコンソールやdevtoolsにアクセスする。