WindowsServerでプロセスのクラッシュ時に自動でプロセスダンプを取得する方法を試してみました

職場の人に指定のアプリを強制的にクラッシュさせる方法は無いのか聞かれたのでそんな事が可能なのか試してみました。

1.プロセスのクラッシュ時に自動でプロセスダンプを取得する設定

参考URL
[Windows Server]プロセスダンプの取得方法
https://www.ibm.com/support/pages/windows-server%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%83%80%E3%83%B3%E3%83%97%E3%81%AE%E5%8F%96%E5%BE%97%E6%96%B9%E6%B3%95

プロセスのクラッシュ時に自動で採取するプロセスダンプはデフォルトでは取得されません。
事前に以下のレジストリを追加する必要があります。尚、レジストリ変更後、再起動は必要ありません。
また、設定後はすべてのプロセスのクラッシュを対象とし、ダンプを出力するようになります。
レジストリ作成箇所
<キー>
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps

値の名前: DumpFolder
種類: REG_EXPAND_SZ
値のデータ:  %LOCALAPPDATA%\CrashDumps

*ユーザーモードのプロセスダンプは DumpFolder に指定した場所に <プロセス名>.<プロセスID>.dump のファイルが保存されますので、分かり易い場所を指定して下さい。
* C:\ の直下に指定しますと、作成されませんのでご注意下さい。

値の名前:  DumpCount
種類: REG_DWORD
値のデータ: 0xa

*フォルダの中に dump を保存するか設定できます。上記の場合 a(10) 個作成されます。 dump ファイルの数が設定値を超える場合、古い dump ファイルから上書きしていきます。

値の名前: DumpType
種類: REG_DWORD
値のデータ: 0x2

*0x1:ミニダンプ、0x2:フルダンプ

2.クラッシュさせることが出来るフリーのアプリを準備する

コマンドやタスクマネージャでのプロセスの強制終了だけではクラッシュダンプは出力されません。
クラッシュ可能なアプリを用意してやる必要があります。

2.1 badappのダウンロードとサーバへの配置
badapp
https://www.ntwind.com/software/utilities/badapp.html

こちらのアプリをダウンロードしてサーバに配置します。
インストール不要のexeファイルです。
ソースコードも付属しています。

3.badappをクラッシュさせる
badapp.exeをWクリックしてbadappを起動

Crash processボタンを押す。

クラッシュダンプファイルが出力されました。

4.試しにPowershellのStop-Processコマンドを使用してアプリを終了させてみる

badapp.exeをWクリックしてbadappを起動

powershell

Stop-Process -Name [プロセス名]

Stop-Process -Id [プロセスID]

クラッシュダンプファイルは出力されませんでした。

5.まとめ
ツールやコマンドなどで指定のプロセスをクラッシュさせることは出来ないようです。
プロセスのクラッシュを発生させるにはアプリ自身でクラッシュできるようなアプリを用意する必要があることがわかりました。

Comments are closed.