2010-08-12 4 views
1

J'essayais d'écrire un code pour gérer les exceptions, mais en remplaçant un autre gestionnaire d'exceptions, est-ce possible?Gestion des exceptions

je développais un .exe dans asm pour déboguer un .dll, et détecter quelques exceptions qui sont soulevées (violation d'accès), mais le .dll a sa propre gestion des exceptions, donc une SEH normale ne devrait pas fonctionner.

Je voudrais savoir s'il existe un type de gestionnaire d'exception global qui pourrait remplacer ceux qui existent déjà?

Répondre

2

Jetez un oeil à Gestion des exceptions vectorielles (http://msdn.microsoft.com/en-us/library/ms681420.aspx)) La page stipule que "Une application peut enregistrer une fonction pour regarder ou gérer toutes les exceptions pour l'application.Les gestionnaires vectoriels ne sont pas basés sur des cadres, par conséquent, vous pouvez ajouter un gestionnaire Les gestionnaires vectoriels sont appelés dans l'ordre dans lequel ils ont été ajoutés, une fois que le débogueur a reçu une notification de première chance, mais avant que le système commence à dérouler la pile. "

+0

Oh, Merci, ça a l'air de bien fonctionner pour moi, mais je voulais aussi demander, pouvez-vous me donner quelques informations supplémentaires sur cette manipulation? Je veux dire, je voulais des infos comme l'adresse où le problème est arrivé, quelle exception, et si c'était une violation d'accès, où il a essayé d'écrire/lire – user506998

+0

Les informations sur l'exception sont transmises à votre fonction de gestionnaire d'exceptions. http://msdn.microsoft.com/en-us/library/ms681419.aspx explique le gestionnaire d'exception et son argument. Sur http://msdn.microsoft.com/en-us/library/aa363082.aspx vous trouvez une description de l'enregistrement d'exception qui fait partie de l'argument pointers d'exception de votre gestionnaire d'exceptions. Il inclut le code d'exception et l'adresse où l'exception s'est produite. http://msdn.microsoft.com/en-us/library/cc301714.aspx donne quelques explications sous le capot. – Patrick

+0

Vous pouvez utiliser l'API SetUnhandledExceptionFilter(), mais votre gestionnaire sera appelé après tous les autres gestionnaires. – ruslik