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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top