バックティックを使用して任意のプロセスを起動するスクリプトがあります。場合によっては、クラッシュが発生し (ゼロ分割など)、分析のためにコア ダンプを取得する必要があります。
クラッシュの PID で呼び出されるオペレーティング システム (これは Windows 7 の場合です。知りたいことはわかっていました) に perl スクリプトをクラッシュ ハンドラーとして登録しました。ハンドラーは、必要なダンプを作成する Microsoft の「cdb」デバッガーをアタッチします。私のテスト 'crasher' プログラムは、ゼロ除算を行う C++ 実行可能ファイル (Crasher.exe) です。
問題: Cygwin の Perl 実装を使用すると、プログラム クラッシュがクラッシュ ハンドラをトリガーしません。私の疑いでは、Perl が問題をキャッチして、静かにドロップしているのではないかと思います。ActiveState の Perl ではすべて正常に動作します。
質問: Cygwin の Perl を邪魔にならないようにするにはどうすればよいでしょうか。
クラッシュ ハンドラーをトリガーしてコア ダンプを生成する ActiveState perl を使用する例を次に示します。
C:> \tools\Perl\bin\perl.exe -e "`Crasher.exe`;"
しかし、Cygwin を使用すると、
C:> \cygwin\bin\perl.exe -e "`Crasher.exe`;"
また、Cygwin のシェルで Crasher.exe を直接起動すると、クラッシュ ハンドラが呼び出されません。Cygwin または ActiveState Perl でバッククォートを介して開始された場合も呼び出されません。