2

バックティックを使用して任意のプロセスを起動するスクリプトがあります。場合によっては、クラッシュが発生し (ゼロ分割など)、分析のためにコア ダンプを取得する必要があります。

クラッシュの 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 でバッククォートを介して開始された場合も呼び出されません。

4

1 に答える 1

0

ハンス・パッサンを引用させてください:

基本的な問題は、SAP が SetUnhandledExceptionFilter() を呼び出すことです。すべての大規模なプログラムがこれを行います。これを防ぐためにオペレーティング システムに組み込まれているボス オーバーライド スイッチはありません。

いいえ、Cygwinでも実行できません。デバッガーで実行して、最初の例外をキャッチできます。スローされる例外の数によっては、興味深いものを見つけることができる場合があります。

于 2016-09-22T18:13:16.587 に答える