2010-09-02 7 views
1

Mon application est équipée d'un gestionnaire de crash personnalisé (voir l'excellent livre de John Robbins "Debugging Windows Applications"). Pour tester cette fonctionnalité, j'ai toujours utilisé la fonction Windows DebugBreak() et cela a toujours fonctionné parfaitement. Mais depuis Windows 7, l'appel de cette fonction indique simplement "Un point d'arrêt a été atteint" et arrête l'application sans appeler mes gestionnaires de crash.Le moyen le plus propre de plantage explicite d'une application?

Je pourrais toujours mettre ce code dans mon application pour tester la fonctionnalité de l'accident:

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: n'y a-t-il pas une façon plus propre de planter votre application sous Windows?

+0

duplication possible de [Win32: comment planter?] (Http://stackoverflow.com/questions/2730447/win32-how-to-crash) –

+0

En effet assez proche. Mais je veux savoir la manière la plus propre, pas la manière brute-force. Quoi qu'il en soit, merci pour le lien. – Patrick

Répondre

1

Juste créer un pointeur nul à un objet avec quelques fonctions de membre un essai et appeler l'un d'entre eux? Et peut-être faire en fonction de sorte que vous savez ce qu'il daoes

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

Certainement la meilleure façon et assez clair ce qui se passe