
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.