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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top