Pregunta

Mi aplicación tiene la costumbre de choque de manejo integrado (véase el excelente libro de John Robbins sobre 'Aplicaciones de depuración de Windows'). Para probar esta funcionalidad, siempre he utilizado la DebugBreak función de Windows () y esto siempre funcionó a la perfección. Pero desde Windows 7, llamar a esta función sólo dice "Un punto de interrupción se ha alcanzado" y se detiene la aplicación sin llamar a mis manejadores de choque.

Siempre podría poner este código en mi aplicación para probar la funcionalidad de choque:

int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;

o incluso añadir varios casos, por si acaso 0xLOQUESEA es una dirección válida:

int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
ptr = (int *)0L;
*ptr = 123456789;
ptr = (int *)0xffffffff;
*ptr = 123456789;

Pero me preguntaba:? No hay una forma más limpia de accidente de su aplicación bajo Windows

¿Fue útil?

Solución

Hay que crear un puntero nulo a un objeto con algunas funciones miembro de un intento de llamada y una de ellas? Y tal vez hacerlo de una función para que sepa lo que daoes

void CrashApp()
{
    MyObject * ptr = 0;
    ptr->Function();
}

Sin duda, la manera más fácil y lo que es bastante claras pasando

Otros consejos

Se puede usar __debugbreak () intrínseca en lugar de DebugBreak () función. Esto no dice nada y se estrella con EXCEPTION_BREAKPOINT

RaiseException () otro es manera de accidente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top