インストール:ダウンロードリンクからexeをDLし、実行するとunzip解凍先が聞かれる。変更する必要がなければそのままunzip。クラッシュ時にダンプを取得させたい場合は、"userdump8.1"フォルダ以下の各アーキテクチャフォルダにあるsetup.exeを使ってシステムにインストールする。"%WINDOWS%\system32\kktools"以下にインストールされ、PATH環境変数にも同フォルダが自動で追加される。任意のタイミングで取得したいだけであれば、setup.exeのインストールは不要です。以上でインストールは終わり。使い方については以降の説明を参照。ユニシス・NTTデータ・東芝が開発に関わっているようです。例外発生などでアプリケーションがクラッシュしたときに自動的にメモリダンプを取得する方法を紹介します。ダンプの極意」p50-511.ワトソン博士(OSが提供するデバッガ)がデフォルトのデバッガになっているかチェック。-iとすることでワトソン博士に変更できる。2.アプリケーションクラッシュ時に自動的にデバッガ(ワトソン博士)が起動することをチェック。O.K."0"になっている場合は1に変更する。3.ワトソン博士の設定をチェック。クラッシュダンプのファイル名を確認。Watson\user.dmpクラッシュダンプの種類は「完全」を選択しておく。オプションはデフォルトのままにしておく。下記スクリーンショット参照。適当なアプリで例外を発生させると、ログがログファイルに記録され、ダンプファイルが作成される。ダンプファイルはwindbgなどで読み込むことが出来る。※エラー報告機能の影響でアプリクラッシュが分かりづらい場合は、エラー報告を無効にする。「マイコンピュータ」右クリック→「システムのプロパティ」→「詳細設定」タブ→「エラー報告」で「エラー報告を無効にする」を設定する。ダンプの極意」p54ワトソン博士でダンプを取得できない場合があるらしい。その場合はUMPDを使う。UMPDをsetup.exeを使ってインストールする(前述)。Monitoring」タブを開き、クラッシュするアプリケーションおよびUMPDで補足したい例外の種類を設定する。アプリケーションを起動し、クラッシュさせるかクラッシュするのを待つ。クラッシュするとUMPDで設定したフォルダに「実行ファイル名+PID+".dmp"」というファイル名でダンプファイルが作成される。設定例:AWD本のサンプル、02sample.exeを設定してみた。"Add"ボタンをクリックしてアプリの実行ファイル名を指定する。Monitoring」タブで追加したアプリ名をクリックし、下部「Rules」ボタンをクリック。rules」を選択し、調整する。rules」の場合デフォルト設定が使われる。Settings」ボタンをクリックして開く設定画面から変更できる。Reportingが大幅に改良され、ワトソン博士も外された。p743ではWER関連レジスタの"ForceQueue"値を編集することでダンプファイルをローカルに保存する方法が紹介されている。本記事ではMSDNで紹介されているWER関連レジスタの"LocalDumps"キーを使ったダンプ方法を紹介する。キー自体はWER配下にあるが、他のWER機構とは独立しているため、エラー報告を無効にしていたり、あるいはエラー報告のダイアログボックスで「送信しない」をクリックした場合でも取得できる。Dumps"設定例:以下のregコマンドを管理者として実行したコマンドプロンプトから実行する。CustomDumpの場合に使われる。任意のタイミングで取得デッドロックなどで無応答になったり、CPU100%で操作を受け付けなくなったときにメモリダンプを取得する方法を紹介します。SP3UMPDを使う。unzipした段階で使える。setup.exeのインストールは不要。コマンドプロンプトを開き、unzipしたフォルダ(デフォルトは"C:\kktools\userdump8.1")中のご使用のアーキテクチャのフォルダにCDする。-p"でプロセス一覧を表示し、対象アプリのPIDか実行ファイル名を確認。実行ファイル名"でダンプ取得。.dmp」というダンプファイル名でそれぞれのプロセスダンプを取得できる。Win7以降ではタスクマネージャーから任意のタイミングでメモリダンプを取得できる。ファイルを作成する方法http://support.microsoft.com/kb/931673タスクマネージャーで取得できるダンプは「フルダンプ」になる。Dump」かを選択できる。Explorerではダンプファイル名と保存場所を指定できるが、タスクマネージャー経由では指定できない("AppData\Local\Temp"以下)。発生時にダンプを取得する方法を紹介します。4)とで一部レジストリ設定が異なります。設定の基本方針としては以下の2ステップです。windbgを起動するように設定する。デバッガ起動時のコマンドラインオプションを調整し、ダンプを取得してすぐに終了するように設定する。Debugging"については表示するバージョンによって内容が変わるため注意が必要。3.x)1.例外発生時に起動するデバッガを指定する。例外発生時に起動するデバッガのフルパスとそのコマンドラインオプションを指定する。デフォルトではこのレジストリ値は設定されていない。/fデスクトップ上でデバッガウインドウが起動するのを一度目視確認しておきたい場合はこのまま「2.」に進む。デバッガウインドウの目視確認は不要で、ダンプファイルが生成される事だけを確認したい場合は、この段階で後述の「3.デバッガ起動時のコマンドラインオプション調整」で紹介するコマンドラインオプションを埋め込んでおく。2.デバッガ起動のタイミングを指定する。デバッガ起動タイミングを指定する。対話形式(デスクトップアプリ)・非対話形式(サービス系)の違いや、デバッガ起動時のメッセージボックス表示有無を調整することが出来る。デフォルトではこのレジストリ値は設定されていない。2を指定すると、プロセスの対話形式(デスクトップアプリ)・非対話形式(サービス)に関わらずデバッガを起動する。16を指定すると、対話形式のプロセスならデバッガ起動の確認メッセージボックス表示。非対話形式なら確認なしでデバッガを起動する。4.x系列になると、関連レジストリがネイティブコードのデバッグに統合された。Autoで確認できる。1.例外発生時に起動するデバッガを指定する。各デバッガ及びワトソン博士に特定のコマンドラインオプションを渡すことで自動的にレジストリを設定してくれる。-i2.デバッガ起動のタイミングを指定する。AeDebugの"Auto"を"1"に設定する。上述の「1.」での自動設定に含まれているので、特に手動で調整する必要はない。2.x系列の「3.」を参考に同様なコマンドラインオプションを設定する。システムのメモリダンプOSのCrashDumpの取得方法を紹介する。「カーネルダンプ」という単語はダンプの種類の一つを指してしまうため、いわゆるBSOD、OSのCrashによるメモリダンプをここでは「システムのメモリダンプ」と便宜上呼んでおく。設定方法はWinXPとWin7でほとんど変わりません。2011年現在、MicrosoftのKBなどWeb上に資料が揃っていますので、詳細はそちらを参照してください。systemhttp://support.microsoft.com/kb/927069/任意のタイミングで取得(=BSOD発生)任意のタイミングで取得する方法として、キーボード操作でSTOPエラー→BSODを発生させる方法と、"StartBlueScreen"というツールを使って任意のパラメータでKeBugCheckEx()実行→BSODを発生させる方法の二種類を紹介する。/fレジストリ設定後、再起動。Ctrlを押しながらScrollLockを二度押しでBSODになるが、この時押すCtrlキーはSpaceの右側のCtrlキーなので間違えないよう注意。キーボード操作によるSTOP発生を無効化するには、上記レジストリに0を設定して再起動する。/fUSB接続キーボードの場合は、次のレジストリキーが対象となる。CrashOnCtrlScrollやその値はPS/2の時と同様。HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\ParametersなおWinSrv2003の場合のみ、KB244139にも記載があるがドライバのアップデートが必要。それ以外のバージョンであればドライバのアップデートは不要。systemhttp://www.nirsoft.net/utils/start_blue_screen.htmlStartBlueScreenはコマンドラインからKeBugCheckEx()に与えるパラメータを設定できます。詳しくは上記WebサイトおよびDLしたアーカイブ中のreadmeファイルを参照してください。STOPエラーなどBSOD発生時のダンプの取得設定(種類や保存場所)基本的に「起動と回復」設定でダンプの種類や保存場所、Crash発生時の挙動を設定する。設定後の再起動は不要。回復」→「詳細」ボタンクリックダンプの種類で「完全メモリダンプ」を指定した場合は、Crash時に一旦全物理メモリを書き出すため、ブートボリューム上に十分な大きさのページングファイルと空き容量が必要。ページングファイルサイズの設定は基本的に「パフォーマンスオプション」から設定する。設定変更後は再起動が必要。パネル」→「システムとセキュリティ」→「システム」の左ペイン、「システムの詳細設定」→「パフォーマンス」→「詳細」ボタンクリック→「パフォーマンスオプション」の「詳細設定」タブ→「仮想メモリ」→「変更」ボタンクリック"初期サイズ"を「すべてのドライブの総ページングファイルサイズ」の推奨値以上に設定しておけば「完全ダンプ」でも安心。実験に使ったWin7は4GBのRAMを搭載している(32bitOSなので利用可能なのは3GBまで)。このため、「起動と回復」設定からは「完全メモリダンプ」を選択できない。そもそも「デバッグ情報の書き込み」のダンプ種類を選択するプルダウンメニューに「完全メモリダンプ」の項目が無い。レジストリを手動で設定することで「完全メモリダンプ」にすることが出来る。管理者として実行したコマンドプロンプトから下記のコマンドを実行することでもCrashDumpEnabledを1に変更できる。1ページングファイルサイズも手動で設定しなおす。デフォルトでは自動管理になっていた:カスタムサイズにして、初期値を推奨値以上に設定し、「設定」ボタンをクリックする。「設定」ボタンのクリックを忘れると、設定値が反映されない。再起動後念のため確認:以上の設定で、完全メモリダンプが有効になる。13:42:52md5:3a6a4994a29d5d6d69c5438b04e24c4esha1:9e28ae759add09adeb43129901bbd1a1c0e1cfc0コメントコメントを投稿するにはログインして下さい。Kamiyamane。