当程序在 Windows 7 上的 Cygwin 上崩溃时没有崩溃对话框

当程序在 Windows 7 上的 Cygwin 上崩溃时没有崩溃对话框

当我在 Windows 7 上启动一个应该崩溃的控制台程序时,出现以下情况:

  • 如果我双击它会崩溃并显示“你的程序崩溃了”对话框弹出
  • 如果我通过DOS控制台,程序崩溃,并显示“你的程序崩溃了”对话框弹出
  • 如果我通过Cygwin 控制台,它就悄无声息地崩溃了。无对话框弹出

请注意,在 Windows XP 上,一切都按预期工作(弹出一个对话框...),并且我可以调试崩溃的程序。

这是 Windows 7 上的 cygwin 错误吗?配置问题?

杂项数据

  • 我的Cygwin是1.7.5,但是用Cygwin 1.7.7复现的。
  • 它在 WinXP 上运行良好,但在 Windows 7(32 位或 64 位)上的 Cygwin 上运行失败
  • 该对话框对于开发/调试目的很有用

我在 Visual Studio 2008 上编写了以下 C++ 程序,处于调试状态(32 位或 64 位具有相同的结果):

#include <cstdio>
#include <windows.h>

int main()
{
   printf("It should crash now...") ;
   ::DebugBreak() ;
   return 0 ;
}

::DebugBreak()被替换为int * p = NULL ; *p = 42 ;(应该会因访问冲突异常而崩溃),在 Cygwin 上的结果完全相同。

谢谢 !

答案1

我在最新版本的 Cygwin 中发现了同样的问题。我还不知道是什么原因造成的,但 Windows SetErrorMode 函数似乎可以正常工作:

{
  const UINT oldErrorMode = ::SetErrorMode(0);
  ::DebugBreak();
  ::SetErrorMode(oldErrorMode);
}

提示:如果您使用的是 MSVC,请改用 __debugbreak() 内部函数。它会将中断放在代码中的该点,而不是从那里调用的函数内。某些内联汇编可能会在其他编译器上执行此技巧。

相关内容