Façon de planter Cleanest explicitement une application?
-
26-09-2019 - |
Question
Mon application a intégré sur mesure accident de manutention (voir l'excellent livre de John Robbins sur les "applications" de Windows Debugging). Pour tester cette fonctionnalité, j'ai toujours utilisé et cela a fonctionné parfaitement toujours la fonction Windows DebugBreak (). Mais depuis Windows 7, appelant cette fonction juste dit « Un point d'arrêt a été atteint » et arrête l'application sans faire appel à mes gestionnaires d'accident.
Je pourrais toujours mettre ce code dans mon application pour tester la fonctionnalité de plantage:
int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
Ou même ajouter plusieurs cas, juste au cas où 0xdeadbeef est une adresse valide:
int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
ptr = (int *)0L;
*ptr = 123456789;
ptr = (int *)0xffffffff;
*ptr = 123456789;
Mais je me demandais: est pas là un moyen plus propre à planter votre application sous Windows
La solution
Il suffit de créer un pointeur NULL à un objet avec des fonctions membres d'essayer et appeler l'un d'eux? Et peut-être faire dans une fonction si vous savez ce qu'il daoes
void CrashApp()
{
MyObject * ptr = 0;
ptr->Function();
}
Sans aucun doute la meilleure façon et assez clair ce qui se passe
Autres conseils
Vous pouvez utiliser __debugbreak () intrinsèque au lieu de DebugBreak () une fonction. Cela ne dit rien et se bloque avec EXCEPTION_BREAKPOINT
RaiseException () est encore un autre moyen de plantage.