2009-08-21 7 views
4

Une application MFC, C++ sur laquelle je travaille semble lancer une exception à l'intérieur d'un pilote de périphérique. (C'est une violation d'accès en écrivant à un pointeur NULL de l'apparence des choses.Les détails de l'accident ne sont pas ce qui m'intéresse en ce moment, cependant ...)Comment voir où une exception est interceptée?

Je peux obtenir le débogueur de Visual Studio pour casser quand le exception se produit à travers la boîte de dialogue Exceptions. Ce que je voudrais savoir cependant, c'est où l'exception est attrapée. Visual Studio peut transmettre l'exception au programme en cours de débogage, mais il ne semble pas y avoir (de ce que je sache) d'étape unique à l'instruction suivante afin que je puisse voir la callstack du point de vue du gestionnaire d'exception.

Est-ce que quelqu'un sait s'il est possible de passer au gestionnaire d'exceptions qui va attraper l'exception ou non?

Cheers, James

+0

Si vous savez où il est géré, vous pouvez définir le point d'arrêt, mais je suppose que vous voulez le trouver en premier lieu :). – Eugene

+0

Quelle version de Visual Studio utilisez-vous? Ce n'est pas clair pour moi si vous avez le code source pour le pilote de périphérique. –

Répondre

0

Au moment où l'exception est lancée, vous devriez avoir une pile d'appels à votre disposition dans le débogueur - en regardant chaque cadre de pile à partir du point du jet à main, vous devriez être en mesure de trouver la première image avec un bloc try/catch enveloppant l'appel à la routine suivante dans le cadre. Tant que ce bloc try/catch gère le type d'exception lancé, c'est là qu'il atterrira.

1

Avec WinDbg, vous pouvez utiliser la commande !exchain. Avec !exchain -c, il affichera vos destructeurs C++ et les blocs catch. par exemple.

Try block 0 
Catch block 0, type: module!my_exception `RTTI Type Descriptor'+0 (6071409c) 
       handler: module!catch_block+582 (6063bcc2) 

Vous pouvez ensuite définir un point d'arrêt avec bp 6063bcc2.

Je ne connais pas un moyen de faire cela dans Visual Studio.

Questions connexes