program Project1;
uses Windows;
type
P_EXCEPTION_POINTERS = ^ EXCEPTION_POINTERS;
//Это мой обработчик
function MySEH(EP: P_EXCEPTION_POINTERS): integer; stdcall;
begin
Result := 1;
MessageBox(0, 'Буага!', 0, MB_ICONERROR or MB_SYSTEMMODAL);
ExitProcess(0);
end;
begin
asm
//Следующие 3 строчки устанавливаю MySEH
push offset MySEH;
push -1;
mov fs:[eax], esp;
//Эти 2 - вызывают исключение
xor eax, eax;
mov [eax], 0;
end;
end.
Перехват падения программы
Программа периодически падает и я не могу отследить в каком месте и при каких обстоятельствах.
Как можно сделать так, чтобы при падении программы, например, запускался какой-то поток и сохранял значения определённых переменных в файл?
пишу под msvc 2005 mfc
вот что мне посоветовали.
Сам этим вопросом мучался,
ну так на чём ты всё-таки остановился? :) как решил проблему?
Глянь это:
SetUnhandledExceptionFilter(), однако у меня не получилось.
Код:
В результате вызывается окно с надписью "Бугага!".
EP - указатель на структуру EXCEPTION_POINTERS в которой можно найти много интерестного, в том числе код ошибки и состояние регистров.
Цитата: ***Zebr@XXL***
ага, спасибо! действительно помогло!
Цитата: 0nni
Ну я много рыл, поидее то что я сейчас покажу делается через
SetUnhandledExceptionFilter(), однако у меня не получилось.
SetUnhandledExceptionFilter(), однако у меня не получилось.
рекомендую посмотреть линк, написанный выше
мне он помог, реализовал перехват и логирование эксепшенов, происходящих в любой точке программы