46

WinDbgを使用してダンプファイルを分析するにはどうすればよいですか?

4

4 に答える 4

72

ここにあなたをあなたの道に連れて行くいくつかの一般的なステップがあります:

まず、リリースビルドの場合でも、PDBファイルを作成するようにコンパイラの設定を変更する必要があります。それ以降のバージョンのVisualC++コンパイラはデフォルトでこれを実行しますが、多くのバージョンのVisualC++では自分でこれを実行する必要があります。プログラムデータベースファイルを作成し、アプリケーションの各ビルドとともにそれらのファイルのアーカイブを保持します。アプリケーションのすべてのビルドに独自のPDBのセットがあることが重要です。たとえば、ビルド10で作成したものと同じものを再利用して、ビルド15で生成されたダンプを調べることはできません。プロジェクトの存続期間中、大量のPDBが作成されることになりますので、そのための準備をしてください。

次に、ダンプファイルを生成したアプリケーションの正確なバージョンを識別できる必要があります。独自のMiniDumpを作成する場合(たとえば、 MiniDumpWriteDump()を呼び出す場合)、これを行う最も簡単な方法は、MiniDumpのファイル名の一部をアプリケーションの完全なバージョン番号にすることです。これを機能させるには、適切なバージョン番号付けスキームを用意する必要があります。私のショップでは、autobuilderがビルドを作成するたびに、すべてのブランチのビルド番号を1ずつ増やします。

顧客からダンプファイルを受け取ったので、ダンプを作成したアプリケーションの正確なバージョンがわかり、このビルドのPDBファイルが見つかりました。

次に、ソース管理の履歴を調べて、この正確なバージョンのソフトウェアのソースコードを見つける必要があります。これを行う最良の方法は、ビルドを行うたびにブランチに「ラベル」を適用することです。ラベルの値を正確なバージョン番号に設定すると、履歴で見つけやすくなります。

WinDbg / VisualC++を起動する準備がほぼ整いました。

  1. そのバージョンのアプリケーションの完全なソースツリーを取得します。c:\app_build_1.0.100たとえば、アプリケーションバージョン1.0ビルド#100の場合は、ハードドライブの別の場所に置きます。
  2. アプリケーションの正確なバージョンのバイナリを取得し、ハードドライブのどこかに配置します。そのバージョンのアプリケーションをインストールしてバイナリを取得するのが最も簡単な場合があります。
  3. 手順2のバイナリと同じ場所にPDBファイルを配置します。

これで、ダンプファイルを表示するための2つのオプションがあります。VisualStudioまたはWinDbgを使用できます。Visual Studioの使用は簡単ですが、WinDbgの方がはるかに強力です。ほとんどの場合、VisualStudioの機能で十分です。

Visual Studioを使用するには、プロジェクトのようにダンプファイルを開くだけです。開いたら、ダンプファイルを「実行」し(F5デフォルト)、すべてのパスが正しく設定されている場合は、クラッシュしたコードに直接アクセスしたり、コールスタックを提供したりします。

WinDbgを使用するには、いくつかのフープをジャンプする必要があります。

  1. WinDbgを起動します
  2. ダンプファイルを開きます。(Ctrl+Dデフォルト)
  3. WinDbgに、正しいMicroSoftシンボルファイルを取得するように指示します。タイプ.symfix。これは、インターネットから大量のデータを取得するため、少し時間がかかる場合があります。
  4. シンボル(PDBファイル)がどこにあるかをWinDbgに伝えます。パス名をPDB.sympath+ c:\pdblocationファイルに置き換えて、と入力します。と記号の間に空白を入れずにプラス記号を入力してください。そうしない.sympathと、+手順3が失敗します。
  5. WinDbgにソースコードがどこにあるかを伝えます。.srcpath c:\app_build_1.0.100このバージョンのソフトウェアを、ソース管理からコードを取得したパスに置き換えて入力します。
  6. WinDbgにダンプファイルを分析するように指示します。タイプ!analyze -v

しばらくして、すべてが正しく構成されている場合、WinDbgはクラッシュの場所に直接移動します。この時点で、アプリケーションのメモリスペース、クリティカルセクション、ウィンドウなどの状態を深く掘り下げるための100万のオプションがあります。しかし、それはこの投稿の範囲をはるかに超えています。

幸運を!

于 2009-04-17T03:05:43.620 に答える
40

(以下の「ダンプ」セクションを参照してください)

WinDbgを使用するための基本的なチュートリアルとデモンストレーション

WinDBGを「開始」/アタッチするさまざまな方法

ワークスペース

ワークスペースがどのように機能するかを理解する...

Cmdtree

「cmdtree」を使用すると、デバッガコマンドの「メニュー」を定義して、簡潔なコマンド名を覚えていなくても、頻繁に使用するコマンドに簡単にアクセスできます。

すべてのコマンド定義を同じcmdtreeテキストファイルに入れる必要はありません....必要に応じて、それらを別々に保持し、複数のコマンド定義をロードできます(その後、独自のウィンドウが表示されます)。

スタートアップスクリプト

コマンドラインで-cオプションを使用すると、WinDBGの起動時にWinDBGスクリプトを自動的に実行できます。

DML(デバッガーマークアップ言語)モードをオンにし、特定の拡張機能をロードし、.NET例外ブレークポイントを設定し、カーネルフラグを設定する機会を提供します(たとえば、カーネルデバッグ時に、トレース情報が表示されるようにDbgPrintマスクを変更する必要がある場合があります.... ed nt !Kd_DEFAULT_Mask 0xffffffff)、cmdtreeのロードなど。

スクリプトの例:

$$ Include a directory to search for extensions
$$ (point to a source controlled or UNC common directory so that all developers get access)
.extpath+"c:\svn\DevTools\WinDBG\Extensions"
$$ When debugging a driver written with the Windows Driver Framework/KMDF
$$ load this extension that comes from the WinDDK.
!load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf
$$ load some extensions
.load msec.dll
.load byakugan.dll
.load odbgext.dll
.load sosex
.load psscor4
$$ Make commands that support DML (Debugger Markup Language) use it
.prefer_dml 1
.dml_start
$$ Show NTSTATUS codes in hex by default
.enable_long_status 1
$$ Set default extension
.setdll psscor4
$$ Show all loaded extensions
.chain /D
$$ Load some command trees
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt
$$ Show some help for the extensions
!wdfkd.help
!psscor4.help
.help /D

コマンドチートシート

拡張機能

「拡張機能」を使用すると、WinDBG内でサポートされるコマンド/機能の範囲を拡張できます。

  • bigLasagne(bldbgexts&blwdbgue)
    -アセンブリ構文の強調表示とドライバーマッピングツール)

  • BigLibナンバーリーダー

  • Byakugan-アンチ
    デバッグメソッドの検出、ビスタヒープの視覚化/エミュレーション、メモリ内のバッファの追跡

  • コールフローアナライザー+KnExt

  • CmdHist-
    デバッグセッションで実行したすべてのコマンドを記録するため、簡単に再実行できます

  • コアアナライザー
    -ヒープ構造の破損をチェックし、スレッドによって共有されているオブジェクトを検出します。

  • dom WinDBG拡張機能
    -(!stlpvector、!idt、!unhex、!grepなど)

  • dumppe-
    メモリからPEファイルをダンプします

  • 画像ビューア拡張機能(ウラジーミル・ヴキチェビッチ)

  • IntelUEFI開発キットデバッガツール
    -UEFIファームウェアのデバッグ

  • リークトラップ
    -リーク検出を支援するGDI/USERハンドルトラッカー

  • モナ(PyKDが必要)
    -高度な分析/エクスプロイトの検索を支援するコマンドのセット

  • MSEC-
    自動化されたクラッシュ分析とセキュリティリスク評価を提供します

  • narly
    -SafeSEH、ASLR、DEP、/ GS(バッファセキュリティチェック)を使用しているかどうかなど、ロードされたモジュールに関する情報を一覧表示します

  • netext(Rodney Viana)
    -(!wservice-WCFサービスオブジェクトの一覧表示、!wconfig-.config行の表示、!whttp-HttpContextの一覧表示、!wselect /!wfrom-配列に対するSQLのようなクエリのサポート)

  • ODbgExt-
    デバッガー拡張機能を開く

  • OllyMigrate-
    再起動せずにdebuggeeを別のデバッガーに渡します

  • Psscor2
    -.NET2.0マネージコードのデバッグを支援するためのSOSのスーパーセット

  • Psscor4
    -.NET4マネージコードのデバッグを支援するためのSOSのスーパーセット

  • PyDBGExt
    -Pythonスクリプトを使用できるようにします

  • PyKD
    -Pythonを使用してWinDBGをスクリプト化できるようにします

  • sdbgext(Nynaeve)
    -(!valloc、!vallocrwx、!heapalloc、!heapfree、!remotecall、!remotecall64、!loaddll、!unloaddll、!close、!killthread、!adjpriv、!ret)

  • SieExtPub-
    レガシー拡張...ext.dllのWinDBGに組み込まれました

  • SOSEX-マネージドNET2.0
    または4.0コードのデバッグを支援するためのその他のコマンド

  • SPT / SDBGExt2(Steve Niemitz)
    -(!DumpHttpContext、!DumpASPNetRequests、!DumpSqlConnectionPools、!DumpThreadPoolなど)

  • Uniqstack-
    デバッガー拡張機能のソース(アクセスするにはOSR Onlineアカウントが必要です)

  • viscope-
    コードカバレッジグラフ

  • Wait Chain Traversal / wct.dll(Codeplex Debugging Extensions-
    アプリケーションスレッドの待機チェーンを表示します(デッドロックの検出に役立ちます)

  • windbgshark
    -Wiresharkプロトコルアナライザーを統合してVMトラフィックの操作と分析を可能にします

  • WinDBG拡張機能(Sasha Goldstein)
    -トレーサー、WCT、heap_stat、bkb、traverse_map、traverse_vector)

  • WinDBGハイライト(ColorWindbg.dll)[Google翻訳を使用してリンクを翻訳する]-asm
    構文のハイライト

独自の拡張機能を作成する

WinDBGを使用したマネージコードのデバッグ

スクリプティング(C#、PS、Python、WinDBG)

dbgeng.dll API/WinDBGツールを使用するデバッガー/ツール

事後分析用のクラッシュダンプファイルを生成するさまざまな方法

ダンプ分析ツール

ダンプ関連ツール

  • Citrix dumpcheck-ダンプファイルの整合性をチェックします(リンク+リンクが破棄されたように見えます)
  • dumpchk(デバッグツールの一部)-ダンプファイルの整合性をチェックします
  • MoonSols Windowsメモリツールキット(以前のワインド)-さまざまなrawメモリダンプファイルをWinDBG互換のdmpファイルに変換します
  • vm2dmp -MicrosoftHyper-VVM状態からメモリダンプへのコンバーター
  • vmss2core -VMWareスナップショットファイルをコアダンプファイルに変換します(ダウンロード)、(手順

仮想マシンのカーネルデバッグ

  • VMKD-仮想マシンKD拡張機能
  • VirtualKD-(VMWare / VirtualBoxでホストされているOSのカーネルデバッガーのサポート)

ビデオ

ブログ

一部のブログ(ネイティブコードとマネージコードのデバッグの混合)。

高度な記事とチュートリアルリソース

代替デバッガー

その他のリンク

于 2014-08-09T21:02:21.337 に答える
5

これは本当に幅広い質問です。

  1. 最初のステップは、ダンプファイルをWinDbgインスタンスにロードすることです。
  2. 次に、シンボルが設定されていることを確認する必要があります。
  3. 最後に、コマンド!analyze -vを実行して、基本的な分析を実行できます。ダンプファイルを価値のあるものにするには、コードでシンボル情報を利用できるようにする必要があります。

Webサイトのメモリダンプ、ソフトウェアトレース、デバッグ、マルウェア、被害者およびインテリジェンス分析ポータルは、私にとって非常に有益でした。また、 MarioHewardtとDanielPravatによるAdvancedWindowsDebuggingという本も本当に楽しかったです。

于 2009-04-09T16:23:22.210 に答える
3

Tess Ferrandezには、Windbgを使い始めるための基本的なチュートリアルとラボの素晴らしいセットがあります。私はそれらを強くお勧めします。

于 2009-04-11T04:27:31.447 に答える