當程式在 Windows 7 上的 Cygwin 上崩潰時沒有崩潰對話框

當程式在 Windows 7 上的 Cygwin 上崩潰時沒有崩潰對話框

在 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() 內部函數。它將斷點放在程式碼中的該點,而不是放在從那裡呼叫的函數內。某些內聯彙編可能會在其他編譯器上執行此操作。

相關內容