2009-09-08 15 views
2

Microsoft debuggerに「記号」が必要/使用されていますか?Symbol、Microsoft Debugging Tools for Windows?

私はしばらく時間をかけてデバッガを理解しようとしましたが、決してそれを得ることができませんでした(私はサーバーハングをデバッグしようとしていました...)。私の問題の一部は適切な「シンボル」を持っていませんでした。

とはなんですか?そして、なぜ私はそれらを必要としますか?私はちょうどテキストを探していませんか?

より良いリンクがありますか?How to solve Windows system crashes in minutes

答えて

6

アドレスを意味のある名前に変換するにはシンボルが必要です。たとえば、すべての関数呼び出しであなたのスタック上の場所があります。

0x00003791 
0x00004a42 

シンボルをデバッガがこれらのアドレスをマッピングすることを可能にする方法に

0x00003791 myprog!methodnamea 
0x00004a42 myprog!methodnameb 

あなたは、プログラムのデバッグバージョン、コンパイラをビルドするとき拡張子が.PDBのシンボルを出力します。また、ソースコードのデバッグなどを行うことができるように行情報が含まれています。

デバッガがこれを選択するには、シンボル検索パスを正しく設定する必要があります。これらのディレクトリで.PDBを検索するには、コマンドウィンドウで

.sympath c:\symbols;c:\temp\symbols 

を入力する必要があります。実行可能ファイルが実行されたディレクトリも同じディレクトリ内にあります。

また、冒頭にこのパスを..あなたがそのようななどNTDLL、GDI、などOSのバイナリを解決できるように、Microsoftパブリックシンボルサーバーを使用すると便利かもしれません:

.sympath SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols;c:\symbols 

あなたがする必要があります。まずc:\ websymbolsを作成します。

0

バイナリファイルをお持ちの場合は、通常はスタックトレースとバイナリまたはIL(.NETでの)命令だけが得られます。シンボルを使用すると、バイナリ/ IL命令をソースコードの対応する行と実際に一致させることができます。ソースコードをお持ちの場合は、Visual Studioでデバッガを接続し、ソースコードをステップ実行することもできます。

2

Windowsのバイナリアーキテクチャでは、デバッグに必要な情報(関数名、ファイル、行番号など)はバイナリ自体に存在しません。むしろ、デバッガがデバッグ中に使用している情報の種類とバイナリ命令を関連付けるために使用するPDBファイル(Program DataBase、ファイル拡張子.pdb)にまとめられています。

サーバーハングをデバッグするには、サーバーアプリケーション自体とサーバーが呼び出しているWindowsバイナリの両方のPDBファイルが必要です。

一般的な注意として、WinDbgでの私の経験は、GDBと比較して使用方法を学ぶのははるかに難しかったですが、使用方法を理解すればはるかに強力でした。 (興味深いことに、Windows/Linuxツールの通常の場合とは逆です。)

関連する問題