エピソード

Defrag Tools #167 - デバッグ ユーザー モード クラッシュ ダンプ Redux

Defrag Tools のこのエピソードでは、Andrew Richards と Chad Beeder は、Debugging Tools for Windows (WinDbg) を使用して、Andrew のコンピューターで発生したさまざまなアプリケーション クラッシュの根本原因を特定します。 Sysinternals ProcDump を使用してダンプをキャプチャします。

デバッグ中に、Windows エクスプローラーで圧縮ファイルと暗号化されたファイルの色を構成する作業を行い、 Sysinternals プロセス モニター を使用して、 PDE デバッガー拡張機能の読み込み時にデバッガーがアクセス拒否された理由を判断します。

この 2 つのエピソードでも同様の調査を行いました。

このエピソードでは、 Debugging Tools for Windows をインストールする方法について説明します。

http://www.sysinternals.comから Sysinternals ツールを取得します。 次の情報を使用します。

Defrag Tools OneDrive から PDE デバッガー拡張機能を取得します。

Microsoft パブリック シンボル サーバーへのシンボル パスを取得します。

自分のコンピューターでクラッシュのダンプを収集するには、Postmortem (AeDebugger) デバッガーとして ProcDump をインストールします。

md c:\dumps
procdump.exe -ma -i c:\dumps

任意のダンプ (ユーザーまたはカーネル) で、自動分析を実行して問題を表示できます。

!analyze -v

デバッグ チート シート

  • c0000005 はアクセス違反です - .ecxr & k を使用します
  • c000027b はストウド例外 (ストア アプリ) - !pde.dse を使用します
  • e0434352 は CLR 例外です。 !sos.pe
  • e0697282 は C++ 例外です- .ecxr > を使用します
  • ブレークポイント80000003 - を使用します。!analyze -v
  • 10 進数を入力するときは、"0n" というプレフィックスを付けます
  • 16 進数を入力するときは、プレフィックス "0x" (既定のプレフィックス)

一般的なデバッガー コマンド

.exr -1

  • 例外コードと例外パラメーターを表示する
  • C0xxxxxx と 80xxxxxx のような数値は、 HRESULT (エラー コード) です
  • 7FFFxxxxxxxx のような数値は、通常、コード (アセンブラー) アドレスです

!住所

  • アドレス情報の表示 - Commited/Reserved/Free、Image/Mapped/Private
  • 数値がコードかデータかを判断するために使用されます。

ln

  • 最も近い住所を一覧表示する
  • 住所付近の記号を表示します。
  • 数値がコードかデータかを判断するために使用されます。

.ecxr

  • デバッグ コンテキストを (Windows エラー報告 コンテキストではなく) 例外のポイントに変更する

r

  • 現在のコンテキストでレジスタを表示します。 (.ecxr は同じ出力を生成します)

k

  • 呼び出し履歴の表示

lmvm

  • マスクを使用して読み込まれたモジュールを詳細に表示する
  • フォルダー、タイムスタンプ、説明、著作権、製品/ファイルのバージョンなど、モジュールの詳細を表示する

|(縦棒またはパイプ文字)

  • 実行可能ファイルのパスを表示する (例: c:\windows\notepad.exe)

!ext.error

  • エラー コードの説明を取得します。 システム エラー コードの説明に最適です。

!pde.err

  • エラー コードの説明を取得します。 HRESULT (80xxxxxx および C0xxxxxx) の記述に適しています

!pde.dpx

  • 証拠 (シンボル、構造体、文字列など) のために現在のスレッドをスクレーピングする

。形式

  • 数値をさまざまな形式で表示します。
  • 数値が実際に ASCII テキストまたは日付/時刻である場合の簡単な操作方法

!sos.pe

  • CLR 例外を表示します。
  • 内部例外がある場合は、リンクをクリックして表示します。

.cordll -u & .cordll -l

  • SOS が読み込まれていない場合は、CLR サポートのアンロードと読み込みを試みます。

!peb

  • プロセス環境ブロック (モジュール、コマンド ライン、環境変数など) を表示する

!teb

  • 現在のスレッドの環境ブロック (スタック範囲、最後のエラー コード、最後の状態コードなど) を表示する

!gle

  • 最後のエラーを取得する
  • 現在のスレッドの最後のエラー コードと最後の状態コードを表示する

.cls

  • 画面をクリアします。

.reload

  • 現在のスタック上のモジュールのシンボルの再読み込み (ダウンロード) を強制します。

.reload /f

  • 現在のスタック上のモジュールのシンボルを完全に再読み込み (ダウンロード) します。

アプリケーションを格納する

現在インストールされているストア アプリケーションとそのバージョンを表示するには、次のコマンドを使用します。

レジストリ エディター (regedit.exe)

  • HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package

PowerShell