Maneira mais limpa de travar explicitamente um aplicativo?
-
26-09-2019 - |
Pergunta
Meu aplicativo possui embutido personalizado (consulte o excelente livro de John Robbins sobre "Debuging Windows Applications"). Para testar essa funcionalidade, sempre usei o Windows Function Debugbreak () e isso sempre funcionou perfeitamente. Mas desde que o Windows 7, chamando essa função apenas diz "um ponto de interrupção foi alcançado" e interrompe o aplicativo sem chamar meus manipuladores de colisão.
Eu sempre poderia colocar este código no meu aplicativo para testar a funcionalidade do acidente:
int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
Ou mesmo adicionar vários casos, apenas no caso de 0xDeadBeef ser um endereço válido:
int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
ptr = (int *)0L;
*ptr = 123456789;
ptr = (int *)0xffffffff;
*ptr = 123456789;
Mas eu queria saber: não há uma maneira mais limpa de travar seu aplicativo no Windows?
Solução
Basta criar um ponteiro nulo para um objeto com algumas funções de membro, tente e ligar para um deles? E talvez faça isso em uma função para saber o que é daoS
void CrashApp()
{
MyObject * ptr = 0;
ptr->Function();
}
Definitivamente o caminho mais fácil e bem claro o que está acontecendo
Outras dicas
Você pode usar __debugbreak () intrínseco em vez de função debugbreak (). Isso não diz nada e trava com excepção_breakpoint
Raisexception () é mais uma maneira de travar.