¿Cómo se obtiene el nombre y/o descripción de una excepción SEHsin teniendo que codificar las cadenas en su aplicación?¿Cómo obtener el nombre/descripción de una excepción?
He intentado utilizar FormatMessage()
, pero trunca el mensaje a veces, incluso si se especifica ignorar inserciones:
__asm { // raise access violation
xor eax, eax
mov eax, [eax]
}
genera una excepción con el código 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);
Rellena msg
con la cadena truncada: "The instruction at 0x
".
Guau, esto realmente parece roto. Funciona para varios mensajes, pero no puedo hacer que funcione para STATUS_ACCESS_VIOLATION por mi vida. – Charlie
Estoy un poco oxidado con esto ahora, pero ¿has probado FORMAT_MESSAGE_FROM_SYSTEM? – morechilli
morechilli: Sí, ya lo intenté, pero no cambia el resultado. – Sascha