No hay cuadro de diálogo de bloqueo cuando un programa falla en Cygwin en Windows 7

No hay cuadro de diálogo de bloqueo cuando un programa falla en Cygwin en Windows 7

Cuando, en Windows 7, ejecuto un programa de consola que debería fallar, tengo los siguientes casos:

  • Si yohaga doble clicen él, falla y dice "su programa falló".se abre el cuadro de diálogo emergente
  • Si lo lanzo a través de unconsola DOS, falla y dice "su programa falló"se abre el cuadro de diálogo emergente
  • Si lo lanzo a través de unconsola cygwin, se bloquea silenciosamente.Sin ventana emergente de diálogo

Tenga en cuenta que en Windows XP, todo funciona como se esperaba (se abre un cuadro de diálogo emergente...) y puedo depurar el programa bloqueado.

¿Es un error de cygwin en Windows 7? ¿Un problema de configuración?

Datos varios

  • Mi Cygwin es 1.7.5, pero fue reproducido con un Cygwin 1.7.7.
  • Funciona en WinXP, pero falla en Cygwin en Windows 7 (32 o 64 bits)
  • El diálogo es interesante para fines de desarrollo/depuración.

Escribí el siguiente programa C++ en Visual Studio 2008, en depuración (32 bits o 64 bits tienen el mismo resultado):

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

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

Ha ::DebugBreak()sido reemplazado por int * p = NULL ; *p = 42 ;(que se supone que falla con una excepción de violación de acceso), con exactamente los resultados defectuosos en Cygwin.

Gracias !

Respuesta1

Observé el mismo problema con las versiones recientes de Cygwin. Todavía no sé qué lo está causando, pero la función SetErrorMode de Windows parece funcionar de maravilla:

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

Sólo un consejo: si estás usando MSVC, usa la función intrínseca __debugbreak() en su lugar. Pone la interrupción en ese punto del código, en lugar de dentro de una función llamada desde allí. Algún ensamblador en línea podría hacer este truco en otros compiladores.

información relacionada