当我在 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() 内部函数。它会将中断放在代码中的该点,而不是从那里调用的函数内。某些内联汇编可能会在其他编译器上执行此技巧。