Comment obtenez-vous le nom et/ou la description d'une SEH exception sans avoir à coder en dur les chaînes dans votre application?Comment obtenir le nom/la description d'une exception?
J'ai essayé d'utiliser FormatMessage()
, mais il tronque le message parfois, même si vous spécifiez d'ignorer les inserts:
__asm { // raise access violation
xor eax, eax
mov eax, [eax]
}
Déclenche une exception avec le code 0xC0000005 (EXCEPTION_ACCESS_VIOLATION)
.
char msg[256];
FormatMessageA(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS,
GetModuleHandleA("ntdll.dll"), 0xC0000005,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msg, sizeof(msg), NULL);
Remplit msg
avec la chaîne tronquée: "The instruction at 0x
".
Wow, cela semble vraiment cassé. Cela fonctionne pour divers messages, mais je ne peux pas le faire fonctionner pour STATUS_ACCESS_VIOLATION pour la vie de moi. – Charlie
Je suis un peu rouillé maintenant mais avez-vous essayé FORMAT_MESSAGE_FROM_SYSTEM? – morechilli
morechilli: Oui, je l'ai déjà essayé, mais ça ne change pas le résultat. – Sascha