
在 Windows 7 上,當我啟動一個應該崩潰的控制台程式時,我會遇到以下情況:
- 如果我按兩下就這樣,它崩潰了,並顯示“你的程式崩潰了”彈出對話框打開
- 如果我透過DOS控制台,它崩潰並顯示“你的程式崩潰了”彈出對話框打開
- 如果我透過CYGWIN控制台,它悄無聲息地崩潰了。沒有彈出對話框
請注意,在 Windows XP 上,一切都按預期運行(打開一個對話框彈出視窗...),我可以調試崩潰的程式。
這是 Windows 7 上的 cygwin bug 嗎?配置問題?
雜項數據
- 我的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() 內部函數。它將斷點放在程式碼中的該點,而不是放在從那裡呼叫的函數內。某些內聯彙編可能會在其他編譯器上執行此操作。