2

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

我已经在操作系统中注册了一个 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 中通过反引号启动,也不会调用它。

4

1 回答 1

0

让我引用汉斯·帕桑特

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

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

于 2016-09-22T18:13:16.587 回答