web-dev-qa-db-ja.com

WinDbgとVisualStudio(VS)デバッガーを使用する理由

WinDbg とVisual Studioデバッガーを使用する主な理由は何ですか?

また、Visual Studioデバッガーの完全な代替として、または必要に応じてさらに使用されるのが一般的ですか。

57
e k

Visual Studioではなくwindbgを使用する必要がある理由がわからない場合は、 Advanced Windows Debugging を読む必要があります。本当に醜い問題をデバッグする必要があるときはいつでも、windbgにはVisualStudioよりも優れたテクノロジーがあります。 Windbgには、より強力なスクリプト言語があり、DLLを記述して難しい問題を自動化できます。 gflags.exeがインストールされ、メモリの上書きをデバッグするためのヒープをより適切に制御できます。

実際にインストールを実行する必要はありません。ファイルをコピーするだけで、すぐに使用できます。また、adsplus.vbをインストールするため、実行中のプロセスのミニダンプを取得できます。リモートデバッグを実行するためのセットアップも非常に簡単です。テストPCでちらつく15インチのモニターと戦う代わりに、自分のデスクから問題をデバッグできることほど良いことはありません。

日常のコード作成にはVisualStudioを使用していますが、他のコンピューターから問題のデバッグを開始したり、非常に醜い状況に陥ったりした場合は、windbgが唯一の方法です。 windbgの学習に時間を費やすことは、大きな投資です。また、クラッシュダンプを見ると、 http://www.dumpanalysis.org/bloghttp://blogs.msdn.com/ntdebugging/default)の2つの優れたリソースがあります。 aspx これはwindbgを使用してすべてのデバッグを行います。

66
LanceSc

WinDbg の使用に役立ついくつかの追加リンクがあります。ほとんどは.NET固有です。

11
Jack Bolding

ネイティブコードとマネージコードのどちらをデバッグするかは指定しません。答えには影響しません。WinDbgは両方にとって非常に便利ですが、多くの人は、.NETアプリをデバッグするときにWinDbgの関連性が低いと考えています。そうではありません。ボーナスとして、WinDbgでSOS拡張子を付けて.NETアプリをデバッグすることで、.NETプラットフォームがどのように機能するかについて多くを学ぶことができます。NETアプリを実行(または接続)する) WinDbgとタイプ...

.loadby sos mscorwks

...使用中のCLRのバージョンに適した拡張機能をロードするようにしてください。次に、「...」と入力します。

!help

... SOS拡張機能で使用できるコマンドを確認します。

Microsoftには開発者ツールが1つしかなく、それがWinDbgだと冗談を言っていると聞きました。デバッグに必要なものはすべて、そこまたは拡張機能にあります。確かに、それらのサブセットは、より使いやすいUIを備えたVSでも利用できます... :-)

6
Martin

NT4.0サーバーから.dmpファイルが送信されたときに使用しました。MSVCはこれらの古い形式のファイルをロードしません。

3
Rob

Kernel-debuggingとremote-user-mode-debuggingを組み合わせます。

AFAIK、ビジュアルスタジオまだ「ソリューション」として説明したモードではリモートデバッグを実行できません。それがwindbgを使用する正当な理由です。

問題:

  • 1394全体でwindbgを設定します。アプリは「ターゲット」で実行されます。 Windbgは「ホスト」で実行されます。
  • ホストでVisualStudioを実行する
  • Visual Studioに、リモートツールを使用してターゲット上でアプリを起動させます。
  • カーネルモードwindbgに侵入して、ターゲットを停止します
  • VisualStudioのTCP接続がタイムアウトになるまで十分に待つ
  • ターゲットを停止解除するためのwindbgの「g」
  • リモートモニターがネットワーク接続が切断されたことを認識したときにアプリの「ポップ」を観察します
  • アプリを再起動します:(

解決:

  • VisualStudioを使用しないでください。
  • 「-server」を使用して、ターゲットでユーザーモードwindbgを実行します
  • ターゲットのwindbgにアプリを起動させます。
  • ホストで、「-remote」を使用してターゲットに接続する2番目のwindbgを開始します。
  • TCP接続が切断された場合、ホスト上で別のwindbgインスタンスを開始するだけで、何も失われません。ユーザーモードのwindbgプロセスを制御しているため、アプリは停止しませんでした。

また、カーネルモードとユーザーモードの両方で同じデバッガーを使用する方が簡単で、windbgはユーザーモードでも非常に強力であり、カーネルモードとユーザーモードの両方のインスタンスで独自のwindbg拡張機能を活用できます。

3
JeffJ

軽量で、クライアントのマシンにインストールせずに実行でき、高速で、カーネルモードをデバッグできます。

2

最新のビジュアルスタジオには、デバッガーを子プロセスに自動的にアタッチさせるwindbgの「-o」に相当するものがまだありませんか?複雑な.batファイルから実行する必要があるアプリ、または親プロセスをフォークして終了するアプリに非常に役立ちます。

2
JeffJ

私はいつもウォッチアンドトレース機能が好きでした: 'wt'->すべての関数呼び出しが発生すると出力ウィンドウに出力されます。それはかなりクールなものでした!

1
C Johnson