Kein Absturzdialog, wenn ein Programm auf Cygwin unter Windows 7 abstürzt

Kein Absturzdialog, wenn ein Programm auf Cygwin unter Windows 7 abstürzt

Wenn ich unter Windows 7 ein Konsolenprogramm starte, das abstürzen sollte, treten die folgenden Ereignisse auf:

  • Wenn ichDoppelklickdarauf stürzt es ab und ein "Ihr Programm ist abgestürzt"Dialog-Popup öffnet sich
  • Wenn ich es über einDOS-Konsole, es stürzt ab und ein "Ihr Programm ist abgestürzt"Dialog-Popup öffnet sich
  • Wenn ich es über einCygwin-Konsole, es stürzt lautlos ab.Kein Dialog-Popup

Beachten Sie, dass unter Windows XP alles wie erwartet funktioniert (ein Dialog-Popup wird geöffnet ...) und ich das abgestürzte Programm debuggen kann.

Ist das ein Cygwin-Fehler unter Windows 7? Ein Konfigurationsproblem?

Sonstige Daten

  • Mein Cygwin ist 1.7.5, wurde aber mit einem Cygwin 1.7.7 reproduziert.
  • Es funktioniert unter WinXP, schlägt aber unter Cygwin unter Windows 7 (32 oder 64-Bit) fehl.
  • Der Dialog ist für Entwicklungs-/Debugzwecke interessant

Ich habe das folgende C++-Programm in Visual Studio 2008 im Debug-Modus geschrieben (32 Bit oder 64 Bit haben das gleiche Ergebnis):

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

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

wurde ::DebugBreak()durch ersetzt int * p = NULL ; *p = 42 ;(das mit einer Zugriffsverletzungsausnahme abstürzen sollte), mit genau den fehlerhaften Ergebnissen unter Cygwin.

Danke !

Antwort1

Ich habe dasselbe Problem bei neueren Versionen von Cygwin festgestellt. Ich weiß noch nicht, woran es liegt, aber die Windows-Funktion SetErrorMode scheint wunderbar zu funktionieren:

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

Nur ein Tipp: Wenn Sie MSVC verwenden, verwenden Sie stattdessen die intrinsische Funktion __debugbreak(). Sie fügt den Break an dieser Stelle im Code ein und nicht in einer von dort aus aufgerufenen Funktion. Einige Inline-Assembler können diesen Trick unter anderen Compilern ausführen.

verwandte Informationen