我有使用反引号启动任意进程的脚本。偶尔会发生崩溃(例如,零除法)并且需要在发生这种情况时获取核心转储以进行分析。
我已经在操作系统中注册了一个 perl 脚本作为崩溃处理程序(这在 Windows 7 中——我知道你想知道),它被调用崩溃的 PID;该处理程序附加了 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 的 shell 中启动 Crasher.exe,则不会调用崩溃处理程序;如果在 Cygwin 或 ActiveState Perl 中通过反引号启动,也不会调用它。