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

目次

概要

ダンプ解析やライブデバッグなどができます。

ダンプ解析は高度な技術を要しますが、クラッシュダンプに以下のコマンドを実行することで
スタックトレースを取得しプロセスをクラッシュさせたプログラムの特定などができます。

ダンプの分析例

クラッシュ・ダンプWinDbgのKコマンドで確認した所、

以下の様にスタックトレースが出力された。

ChildEBP RetAddr
1c2fd0b8 774a5620 ntdll!KiFastSystemCallRet 1c2fd0bc 774d3c62 
ntdll!NtWaitForSingleObject+0xc
1c2fd140 774d3d4b ntdll!RtlReportExceptionEx+0x14b
1c2fd180 774efa87 ntdll!RtlReportException+0x3c
1c2fd194 774efb0d ntdll!RtlpTerminateFailureFilter+0x14
1c2fd1a0 77449bdc ntdll!RtlReportCriticalFailure+0x6b
1c2fd1b4 77444067 ntdll!_EH4_CallFilterFunc+0x12 1c2fd1dc 
774a5f79 ntdll!_except_handler4+0x8e
1c2fd200 774a5f4b ntdll!ExecuteHandler2+0x26
1c2fd2b0 774a5dd7 ntdll!ExecuteHandler+0x24
1c2fd2b0 774efaf8 ntdll!KiUserExceptionDispatcher+0xf
1c2fd624 774f0704 ntdll!RtlReportCriticalFailure+0x5b
1c2fd634 774f07f2 ntdll!RtlpReportHeapFailure+0x21
1c2fd668 774afc25 ntdll!RtlpLogHeapFailure+0xa1
1c2fd694 763b9a26 ntdll!RtlFreeHeap+0x60
1c2fd6a8 76079c03 kernel32!HeapFree+0x14 Unable to load image 
C:\YYYYY\XXXXX.dll, Win32 error 0n2
*** WARNING: Unable to verify timestamp for XXXXX.dll
*** ERROR: Module load completed but symbols could not be loaded 
for XXXXX.dll

これにより、"C:\YYYYY\XXXXX.dll" がプロセスをクラッシュさせていることが解る。

基本的な使い方

インストール

Windows SDK

Debugging Tools for Windowsに同梱されているためこれをインストールする。

注意点

ポイント解説

プロダクト・チームも利用

カーネルモード・ユーザモード

ユーザモードのデバッグでも、カーネルモードのデバッグでも利用可能。

非侵入的アタッチ

非侵入的アタッチが可能。

コマンド

コマンドの種類

標準コマンド

メタコマンド(ドットコマンド)

拡張コマンド

取得情報別コマンド

システム情報取得コマンド

プロセス、モジュール情報取得コマンド(PEB)

スレッド情報取得コマンド(TEB)

コールスタックのサイズ取得コマンド

コールスタックの情報取得コマンド

トラップフレームのコマンド

トラップフレームとは・・・

プロセスのメモリ情報、操作コマンド

ヒープ情報取得コマンド

下記コマンドを実行する場合、グローバルフラグを設定する。

シンボルの設定など

スレッド・スタック、例外分析

アンマネージでもマネージでも利用可能。

「!analyze -v」コマンド

クラッシュ分析ヒューリスティックにより現在の例外に関する詳細情報を表示

「~」コマンド

スレッド一覧表示

「~*k」コマンド

スレッドのコール・スタックを表示

~<thread>s

カレント・スレッドの設定

「KN, .Frame , DV, and DT 」コマンド

現在のコール・スタックの引数、ローカル変数を確認できる。

マネージで利用可能

「!PrintException? -nested」コマンド

クラッシュ分析ヒューリスティックにより現在の例外に関する詳細情報を表示

「!thread」コマンド

スレッドの状態を表示

「!ClrStack? -a」コマンド

なお、ここに表示される

は、以下のコマンドを使用して値を確認できる。

メモリ・リーク分析

準備

ヒープマネージャに管理されるヒープ内の利用状況に関する情報を所得したい場合、ダンプ取得コマンドを実行する前に、グローバルフラグを設定する。

※ [ダンプの種類と概要、取得ツール]のシートの[メモリリーク分析用のダンプ]を参照のこと。
なお、リークを疑っている場合、同じダンプを見ても解らないので、差分を見るなどする。
若しくは、UMDHツールを使用してログ出力してヒープの差分を確認するなどする。

ダンプ取得

任意のツールを使用してユーザモード・プロセスダンプを取得する。

ダンプ分析

仮想アドレス空間の情報

ヒープ内の利用状況の情報

下記を実行してヒープ内のメモリ利用状況を確認する。

カーネル・ダンプ(完全メモリ・ダンプ)分析

準備と取得

準備

取得

分析

参考

SOS拡張によるマネージ・ライブ・デバック

参考

WinDbg. From A to Z!

WinDbg_A_to_Z_mono_JP.pdf
http://windbg.info/download/doc/pdf/WinDbg_A_to_Z_mono_JP.pdf

Debugger Commands

http://msdn.microsoft.com/en-us/library/ff540507.aspx

WinDbg入門

http://www.ttoyota.com/php/install_intro.php

Windbg Hoster-JP

http://www.hoster.jp/tag/windbg

現場で使えるWinDbgカーネルコマンド

技術-Windows-WinDbgメモ

技術-Windows-WinDbgメモ - Glamenv-Septzen.net
http://www.glamenv-septzen.net/view/706

Hyper-Vなどの仮想OSにwindbgをアタッチする方法

DKOMベースのWindowsメモリダンプ解析技術オンサイトセミナー

http://www.ttoyota.com/php/onsiteseminar_ver1.php

microsoft.com

新ツール

WinDbg Preview

Time Travel Debugging


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


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