強制的にWindowsのメモリダンプを取る方法

自分の作ったソフトが、どうもおかしなところでフリーズしたり、挙動がおかしくなったときは、強制的にメモリダンプを吐かせる方法があるようなので、ご紹介したいと思います。

PS/2キーボードの場合

まず以下のレジストリを「regedit」を使って追加します。

  • レジストリ: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
  • 値の名前: CrashOnCtrlScroll
  • データ型: REG_DWORD
  • 値のデータ: 1

そうしたら、PCを再起動し、レジストリを反映させます。

次にメモリダンプを取りたいタイミングで、キーボード右のCtrlキーを押しながら、ScrollLockを2回押します。

これで、任意のタイミングでメモリダンプが取れるようです。

USBキーボードの場合

USBキーボードの場合は、PS/2のものと使われるドライバが異なるため、修正プログラムをダウンロードする必要があるようです。

以下のサイトの上部に、「修正プログラムのダウンロード」があるので、そちらから入手してください。

これを入手したら、後はPS/2の場合と似ています。

まず以下のレジストリを「regedit」を使って追加します。「kbdhid」の箇所がPS/2と異なるので、要注意です。

  • レジストリ: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters
  • 値の名前: CrashOnCtrlScroll
  • データ型: REG_DWORD
  • 値のデータ: 1

そうしたら、PCを再起動し、レジストリを反映させます。

次にメモリダンプを取りたいタイミングで、キーボード右のCtrlキーを押しながら、ScrollLockを2回押しますと、任意のタイミングでメモリダンプが取れるようです。

まとめ

これを使うことで、任意のタイミングでダンプファイルが取れるようになるので、メモリの状況がどうなっているのか気になる方や、どこでデッドロックが起こっているのか知りたい方は使ってみると良いですね。

詳細については、以下のMicrosoftのページをどうぞ。