アクティブメモリダンプ

皆様、アクティブメモリダンプはご存知でしょうか。Windows 10 から追加された新しいダンプファイルの形式です。

 

いかがお過ごしでしょうか。WDK サポートチームの石沢です。

アクティブメモリダンプは、その特徴として、完全メモリダンプよりファイルサイズを抑えられることが挙げられます。

また、カーネルメモリダンプには存在しない、一部のユーザー空間のメモリ情報が付加されることも挙げられるでしょう。

上記のような特徴から、完全メモリダンプを出力するほどストレージの空き容量に余裕がない、出力に時間がかかってしまう、またカーネルメモリダンプでは情報が足りないという場合の選択肢として考えられます。

もちろんデバッグ時に、潤沢なリソースや環境がある場合は、完全メモリダンプを取得いただくことをお勧めいたします。

 

取得方法はいたって簡単!

先日の津田さんが執筆された記事「完全メモリダンプ採取の設定方法」の手順 (4) では [完全メモリダンプ] を選択しているのですが、こちらを [ アクティブ メモリ ダンプ] に変更するだけです。

 

clip_image001

 

あとはダンプファイルを生成して、コールスタックを確認すれば…ユーザー空間の情報が残っていることが確認できますね!

以下の例では、ntdll や USER32 などのユーザー空間上の処理がコールスタックから確認することができています。

 

kd> k

ChildEBP RetAddr 

(…略…)

0008f5d4 76f75b83 NotMyfault+0x21f9

0008f600 76f56d5a USER32!_InternalCallWinProc+0x2b

0008f688 76f565dd USER32!UserCallDlgProcCheckWow+0x102

0008f6dc 76f72b32 USER32!DefDlgProcWorker+0xad

0008f6f8 76f75b83 USER32!DefDlgProcA+0x22

0008f724 76f59d1a USER32!_InternalCallWinProc+0x2b

0008f7bc 76f59af5 USER32!UserCallWinProcCheckWow+0x1aa

0008f818 76f62e7f USER32!DispatchClientMessage+0xb5

0008f848 778618a6 USER32!__fnDWORD+0x3f

0008f878 76f79d5a ntdll!KiUserCallbackDispatcher+0x36

0008f87c 76f5914e USER32!NtUserMessageCall+0xa

0008f8dc 76f58fe7 USER32!SendMessageWorker+0xee

0008f900 67b0959b USER32!SendMessageW+0xe7

0008f920 67b484aa COMCTL32!Button_NotifyParent+0x39

0008f938 67b3e853 COMCTL32!Button_ReleaseCapture+0x97

0008f988 76f75b83 COMCTL32!Button_WndProc+0x7e3

0008f9b4 76f59d1a USER32!_InternalCallWinProc+0x2b

0008fa4c 76f59860 USER32!UserCallWinProcCheckWow+0x1aa

0008faac 76f55a2b USER32!DispatchMessageWorker+0x1a0

0008fad4 67ae22ef USER32!IsDialogMessageW+0xdb

0008faf4 67ae2228 COMCTL32!Prop_IsDialogMessage+0x2f

0008fb48 67ae2433 COMCTL32!_RealPropertySheet+0x211

0008fb5c 67b95b14 COMCTL32!_PropertySheet+0x34

0008fba0 00a7262f COMCTL32!PropertySheetA+0x44

0008fc9c 00a727dc NotMyfault+0x262f

0008fd2c 752d95f4 NotMyfault+0x27dc

0008fd40 777f22ca KERNEL32!BaseThreadInitThunk+0x24

0008fd88 777f2299 ntdll!__RtlUserThreadStart+0x2b

0008fd98 00000000 ntdll!_RtlUserThreadStart+0x1b

 

プロセスによってはユーザー空間の情報が残っていないため、その点ご注意いただきながら、利用場面に応じてご活用ください。

 

ではまたお会いいたしましょう!

WDK サポートチーム 石沢 望夢