マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

クラッシュ時にプロセスに事後分析デバッガをアタッチしてダンプを取得する。

問題が起きた時刻に近い情報(メモリ&スタック)を取得可能であるが、
上記に問題の情報が含まれないケースや、マルチスレッド環境化などで、
重要な情報をタイミングによって取り逃がしているケースはあり得る。

使用可能なツール

OSや対象プロセス(マネージド、アンマネージド)によって
使用するツール・手順・設定等が異なるのでサポートと連携して行う。

以下は、クラッシュ・ダンプの専用ツール。

ハング・ダンプと併用可能なツールはこちら

OS標準

ワトソン博士、ワトソンログ

WER(Windows Error Report)

ワトソン博士の後継で、Vista以降のOS、クラッシュダンプ以外も取得可能。

にレポートとして表示される。

その他

UMPD

WinDbg

CDB

NTSD

ProcDump

マネージド・コードの場合

UMPDWinDbg、CDB、NTSDのオプション指定により
CLRの例外発生時のマネージコードのクラッシュダンプ取得も可能。

参考

取得方法

未処理例外のディスパッチ

未処理例外=セカンドチャンス(ラストチャンス)例外

ファーストチャンス例外

無害な(ハンドリングされた例外

ダンプ取得できないマネージ例外

.NETのランタイム(mccorwks.dll内部)でAccess Violation等の例外が発生した場合、.NETでは、ユーザアプリケーションでは例外をハンドルできない仕様となっている。この場合、ファーストチャンス例外発生後に、イベントログを出力しプロセスを終了するので、セカンドチャンス例外が発生せず、クラッシュダンプをデバッガから取得できない。このため、このようなケースではファーストチャンス例外の監視機能を持つUMPDADPlusなどのダンプ取得ツールを使用してクラッシュダンプを取得する。

事後分析デバッガのインストール方法と設定方法

ワトソン博士

UMPD

WinDbg

CDB

NTSD

VisualStudio? 2010 以降

.NET Framework 4 以降

VisualStudio? 2010 以前

設定場所と値が異なるが割愛

.NET Framework 3.5 以前

設定場所と値が異なるが割愛

Windows Forms

Windows フォームで Just-In-Time デバッグを有効にするには、
本設定を併用しないとデバッガを無効化できない事がある模様。

その他の取得方法

UnhandledExceptionFilter?関数

プログラムはクラッシュさせずに自前の未処理例外フィルタを実行することもできる。また、ここでセルフダンプの取得を行う事もできる。  

メモリリーク用

グローバルフラグ

また、グローバルフラグを設定して

を有効にする必要がある。

ページ ヒープをオンにした場合、ヒープオーバーランの検出も可能になる。
※ ヒープに対するバッファオーバーランをヒープオーバーランと呼ぶ。

ページ ヒープ、ユーザモード スタックトレース データベースはメモリを使用するため、調査後には無効にする。

Global Flags Editor

グローバルフラグの設定には、
Global Flags Editor (Gflags.exe) ユーティリティを使用する。

(Debugging Tools for Windowsに同梱されている)

を有効・無効にする。

参考


Tags: :障害対応, :性能, :デバッグ


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS