可以在Cygwin终端中启用非Cygwin应用程序的Post-Mortem调试吗?

时间:2015-06-29 19:04:49

标签: c windows visual-c++ cygwin windbg

我们有一个Cygwin和非Cygwin程序混合的系统,所有这些程序都在Cygwin bash会话下运行。

其中一个非Cygwin可执行文件会定期崩溃,我尝试使用windbg as outlined here启用事后调试。

我写了一个故意崩溃的测试程序。按照上面的步骤操作后,当测试程序崩溃时,windbg会自动打开 - 这正是我正在寻找的内容。但是,如果我从Cygwin的bash运行测试程序,bash会打印一个" Segmentation fault"错误消息和windbg无法打开。

有没有办法让windbg打开一个非Cygwin程序,这个程序是从Cygwin bash shell启动的,崩溃了?

P.S。:我们所有的非Cygwin程序都是使用MS Visual Studio编译的C程序。

1 个答案:

答案 0 :(得分:0)

Cygwin可能正在安装一个未处理的异常过滤器,它允许它处理崩溃并因此打印“Segmentation fault”。这可以防止实时调试器启动,因为异常确实是由Cygwin处理的。我不知道你是否可以禁用它。要获得内存转储,您可以使用procdump为所有第一次机会异常创建内存转储。最后的第一次机会异常内存转储很可能对应于导致Cygwin显示“分段错误”的那个。

运行程序,然后从Windows命令提示符运行: procdump -e1 <PID|Process Name>

如果您的程序在有机会运行procdump之前崩溃,请尝试使用-w选项首先运行procdump,以便等待程序启动。然后运行你的程序。

确保使用'e'指定'1',否则您将无法获得第一次机会异常。

您可以通过以下方式获得Microsoft的procdump: https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx