3

過去に、WinDbg を使用して .dmp ファイルを解析することへの言及を聞いたことがあります (私は間違っていると思います)。

また、.map ファイルを使用してかなり大規模なデバッグを行いました。また、標準の論理ヒューリスティックと Visual Studio デバッガーを使用して大規模なデバッグを行いました。

ただし、開発中のプログラムがクラッシュして .dmp ファイルが作成されることがあります。.dmp ファイルを解釈できませんでした。少し前に、.dmp ファイルの解釈方法に関する SO の質問を投稿しました ( Windows 7 で .dmp ファイルを表示するには? ) 。その質問。

今日、私は無関係な SO の質問 ( C++ の try/throw/catch => machine code ) を見ていましたが、受け入れられた回答の下にある有用なコメントが、WinDbg を再び参照しています。

ただし、本当にこれを見つけたい場合は簡単です。WinDbg でトレースするだけです。

このアドバイスに従いたいと思います。ただ、「 WinDbgでなぞるだけ」というのは、私にとっては簡単なことではありません。過去に試してみましたが、これが何を意味するのか、何をすべきかわかりません!

ということで、再挑戦です。「とりあえず」ということで、次の点について、わかりやすく簡単な指示をお願いします。

  1. WinDbgとは
  2. WinDbg が .dmp ファイルに関連していると仮定すると、ダンプ ファイルとは正確には何であり、WinDbg とどのように関連しているのでしょうか (私の仮定が間違っている場合は修正してください)。
  3. どのように .dmp ファイルを作成し、それに応じて WinDbg を使用してそれらを分析するのですか (繰り返しますが、WinDbg と .dmp ファイルの関係について間違っている場合は訂正してください)。

Visual Studio のみをインストールして実行しているプログラマーの「出発点」からこの質問に答えていただければ幸いです。

ありがとう!

4

2 に答える 2

4
  1. WinDbg は多目的デバッガです。他のデバッガーと同じように、アタッチ、ブレークポイントの設定などにより、ライブ プロセスをデバッグできます。また、.dmp ファイルであるクラッシュ ダンプ ファイルも分析できます。コマンドを与えることで機能します。

  2. .dmp ファイルは何かのメモリ ダンプです。それが何であるかは、メモリダンプの目的によって異なります。たとえば、プロセスの場合があります。カーネルの場合もあります。メモリ ダンプの内容も異なります。あなたの場合、おそらくプロセスがクラッシュしたときの様子です。メモリ ダンプに含まれる内容は、ダンプの種類によって異なります。

  3. さまざまな方法があります。Windows Vista 以降、Server 2008 以降では、タスク マネージャーから直接実行できます。プロセスを右クリックし、[メモリ ダンプの作成] をクリックします。WinDbg は、.dumpコマンドを使用してライブ プロセスからメモリ ダンプを作成することもできます。adplus などの他のツールを使用すると、プロセスがメモリや CPU のしきい値を超えたときやクラッシュしたときなど、特定の条件でメモリ ダンプを自動的に作成できます。

WinDbg は、クラッシュ ダンプを簡単に開くことができます。重要なのは、最初にシンボルを正しくロードすることです。通常、.pdb ファイルの形式またはシンボル サーバーから (必須ではなく、常に可能ですが、非常に役立ちます)。

WinDbg を実行したら、クラッシュ ダンプで使用できるコマンドのリストを確認します。

于 2012-11-30T14:26:11.660 に答える
2
  1. WinDbg は、コマンド ライン デバッガー cdb.exe の Gui バージョンであり、どちらもユーザー プロセスおよびカーネル モードのデバッガーであり、DbgHelp.dll を使用して、アプリケーションまたは NT カーネルにコマンドを発行します (API があるため、同じことができます)。 )。
  2. .Dmp ファイルはさまざまな詳細のメモリ ダンプです。すべてのスレッドのコール スタックに十分な最小限の詳細を持つものもあれば、ユーザー モード メモリ全体、ハンドル情報、スレッド情報、メモリ情報などを格納するものもあります。詳細については、こちらを参照してください。 . そのため、ダンプ ファイルは WinDbg とは何の関係もありませんが、それを開くことができます。ちなみに、Visual Studioで .dmp ファイルを開くことができます。
  3. @vcsjonesが既に述べているように、タスク マネージャーを使用してこれを行うことができます (少なくとも Vista 以降では可能です.dump /ma c:\mem.dmp) 。また、ワトソン博士を使用して、クラッシュが発生したときに Windows がこれを行うように設定します。

ただし、適切なコール スタックを生成できるようにするには、Windows とアプリケーションのシンボルが必要です。明らかな理由から、メモリ ダンプでステップ スルーまたはブレークポイントを設定できないことに注意してください。これは、ライブ プロセスに対してのみ実行できます。WinDbg を非侵襲的にアタッチすることもできるため、Visual Studio をアタッチして、WinDbg を非侵襲的にアタッチし、WinDbg のツールセットを使用してデバッグを支援できます。

私にとって WinDbg の主な利点は、無料であること、ダウンロードとインストールが簡単であること、高速であること、Visual Studio では困難または不可能な問題を診断するための非常に豊富なツールセットを備えていることです。

于 2012-11-30T14:41:16.400 に答える