当Cygwin的Perl启动带有反引号的程序时,无法触发系统调试器转储核心



我有使用反引号启动任意进程的脚本。 偶尔会发生崩溃(例如零除),并且需要获取核心转储进行分析。

我已经向操作系统注册了一个perl脚本作为崩溃处理程序(在Windows 7中 - 我知道你想知道),它被崩溃的PID调用;处理程序附加Microsoft的"cdb"调试器,创建所需的转储。 我的测试"崩溃器"程序是一个C++可执行文件,它执行除以零(Crasher.exe)。

问题:当我使用Cygwin的Perl实现时,程序崩溃永远不会触发崩溃处理程序。 我怀疑 Perl 发现了问题并默默地放弃了它。 使用来自ActiveState的Perl都可以正常工作。

问题:我怎样才能让Cygwin的Perl摆脱困境,让错误一直传播回系统。

下面是一个使用 ActiveState perl 的示例,该 perl 触发崩溃处理程序并生成核心转储

  C:>     toolsPerlbinperl.exe  -e "`Crasher.exe`;"

但是使用Cygwin并不能

  C:>     cygwinbinperl.exe  -e "`Crasher.exe`;"

另外,如果我直接在 Cygwin 的 shell 中启动 Crasher.exe则不会调用崩溃处理程序;如果在 Cygwin 或 ActiveState Perl 中通过反引号启动,也不会调用它。

让我引用Hans Passant的话:

基本问题是SAP调用SetUnhandledExceptionFilter()。并做自己的事情,所有大型程序都这样做。操作系统中没有内置的老板覆盖开关来阻止它执行此操作。

所以不,你也不能为Cygwin做这件事。可以在调试器下运行它并捕获第一次机会异常。根据引发的异常数量,您可能会找到有趣的异常。

最新更新