2009-08-14 5 views
1

(plate-forme Win32 C++) En utilisant __try et __finally, comment puis-je obtenir le nom du module (Et l'adresse) de la cause d'une exception? J'appelle GetExceptionInformation() mais de cela je ne suis pas sûr où cette information est.Comment obtenir le nom du module qui a provoqué une exception structurée avec une structure _EXCEPTION_POINTERS? (win32 C++)

Compte tenu d'autres ressources en ligne et dans MSDN les gestionnaires Minidump et d'autres exemples de code semblent être en mesure de l'obtenir, mais je ne sais pas comment.

Toutes les références ou ressources plus éclairantes sont appréciées.

Répondre

1

Vous souhaitez parcourir la pile d'appel, comme décrit dans this CodeProject article. Vous pouvez utiliser le code de Jochen tel quel ou essayer de récolter suffisamment de détails pour extraire l'information que vous voulez.

+0

Je vais examiner cela, merci. – Tim

3

L'enregistrement EXCEPTION_RECORD fourni par EXCEPTION_POINTERS inclut l'adresse où l'exception s'est produite. Vous pouvez ensuite probablement utiliser EnumProcessModules() et GetModuleInformation() pour localiser le module auquel appartient l'adresse d'exception, puis utiliser GetModuleFileNameEx() pour obtenir le nom de fichier de ce module.

+0

Pour une raison quelconque, même si j'ai vu que j'ai accès à l'adresse, je n'ai pas pensé à utiliser ces appels - pour une raison quelconque, je pensais qu'il y avait des informations cachées quelque part. faire sous les couvertures. – Tim

Questions connexes