-
Notifications
You must be signed in to change notification settings - Fork 0
MS_DumpOverview
-
TOP > トラブルシュート > 障害発生時の分析
- ダンプの概要(種類と取得)
- ユーザモード・プロセス・ダンプ
- カーネル・ダンプ
ダンプの取得・参照 → 解析により問題を特定できる可能性がある。
- ソースコード提供がないミドルウェア、ツール類で問題が発生している場合
- または、デバッガの使用できない本番環境で問題が発生した場合
-
ダンプでは解析可能な範囲は限られるため、
デバッガを使える開発・検証環境ではデバッガを使用する。例えば、任意のプロセスにVSデバッガを手動でアタッチすることもできるし、
プロセス起動時にVSデバッガを自動的にアタッチすることもできる。 -
デバッガをインストールできない本番環境ではダンプに頼る。
PDB(シンボル)やソースコードもあればなお良い。
- (ユーザモード・プロセス・ダンプの)取得タイミング
- カーネル・ダンプはクラッシュ・ダンプに近い。
クラッシュ時にプロセスにデバッガをアタッチしてダンプを取得する。
問題が起きた時刻に近い情報(メモリ&スタック)を取得可能であるが、
上記に問題の情報が含まれないケースや、マルチスレッド環境下などで、
重要な情報をタイミングによって取り逃がしているケースはあり得る。
(ハング・ダンプ)
ハングしている状態のプロセスにデバッガをアタッチしてダンプを取得する。
ハングしているスレッドのスタックを見ることで
ハングを起こしているプログラムコードの部位の特定が比較的容易。
- UMPDや、WER(Windows Error Report)などのAPIを使用してダンプを取得可能。
- アンマネージド・コード、マネージド・コードのクラッシュダンプ取得が可能。
- アプリケーションでハンドル可能なので、より詳細なログを作成できる。
(ユーザモード・プロセス・ダンプの)フルダンプとミニダンプ
- プロセスの全仮想アドレス空間のダンプ
- サポートされなくなりつつある。
- 細かい制御が可能で、また、フルダンプより多くの情報が含まれる。
- 取得可能な情報と、その制御方法については、以下を参照
-
MINIDUMP_TYPE enumeration
UMPD や WER で、使用できたりできなかったりする。
-
MINIDUMP_TYPE enumeration
移行メモ: 「ミニダンプのほうがフルダンプより多くの情報が含まれる」は一見矛盾するが、 これは
MINIDUMP_TYPEのフラグ次第という意味。 ミニダンプ形式(.dmp)は「何を含めるか」をフラグで選べる可変フォーマットで、MiniDumpWithFullMemory等を組み合わせれば全メモリも含められる一方、 ハンドル情報やスレッド情報など、旧来の「フルダンプ」(.hdmp/ワトソン形式)には 無かった情報も含められる。 現在は ミニダンプ形式が標準で、旧フルダンプ形式は事実上使われない。
セキュリティを考慮し、ダンプ出力先は
administrator などのユーザのみが参照できる位置とすること。
※ ダンプにはメモリ上の平文パスワードや個人情報が含まれうるため、
外部へ渡す際は取り扱いに注意する。
ダンプ取得に使用するツールの一覧を参照。
Tags: インフラストラクチャ, Windows, 障害対応, デバッグ
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。