62

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

また、Visual Studio デバッガーの完全な代替品として一般的に使用されているのか、それとも必要が生じたときにそれ以上のものとして使用されているのでしょうか。

4

8 に答える 8

71

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

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

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

于 2008-09-19T20:35:21.670 に答える
13

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

于 2008-09-24T13:04:15.287 に答える
6

ネイティブ コードとマネージ コードのどちらをデバッグしているかは指定しません。答えには影響しません。WinDbg はどちらにも非常に役立ちますが、多くの人は、.NET アプリをデバッグするときは WinDbg の関連性が低いと考えています。そうではありません。おまけとして、SOS 拡張機能を使用して WinDbg で .NET アプリをデバッグすることにより、.NET プラットフォームがどのように機能するかについて多くを学ぶことができます。WinDbg で .NET アプリを実行 (またはアタッチ) し、次のように入力します。

.loadby sos mscorwks

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

!help

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

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

于 2008-09-23T09:11:03.780 に答える
3

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

AFAIK、Visual Studioは、私が「ソリューション」と説明しているモードでは、リモートデバッグを実行できません。それはwindbgを使用する非常に良い理由です。

問題:

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

解決:

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

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

于 2009-02-11T07:21:10.317 に答える
3

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

于 2008-09-19T20:13:54.123 に答える
2

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

于 2009-02-11T07:24:05.990 に答える
2

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

于 2008-09-19T20:16:04.120 に答える
1

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

于 2010-07-17T05:18:12.470 に答える