FPC и Call Stack

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
vay
новенький
Сообщения: 22
Зарегистрирован: 06.07.2009 17:56:46

FPC и Call Stack

Сообщение vay »

Всем доброго дня. Никто не сможет посоветовать метод глобального перехвата exception в приложении? То есть - возник exception в коде, я его в нужном мне месте обработал (вывел в лог), и вернул управление туда, куда бы оно и пришло без моего вмешательства. Ибо для Delphi такую возможность имею, а при сборке под FPC оказалось, что сущность RTLUnwindProc: Pointer; в нем не существует :(

Вот и думаю, куда бы подцепиться в приложении free pascal чтобы получать уведомления о возникших exception для их логирования.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

если я не ошибаюсь, для перехвата исключений есть глобальная переменная:
ExceptProc : TExceptProc

утилиты для просмотра стека:

для FPC

Procedure Dump_Stack(var f : text;bp:pointer);
в качестве bp, узатель из функции get_frame

Код: Выделить всё

Dump_Stack(output, get_frame());


procedure DumpExceptionBackTrace(var f:text);


для Lazarus-а

в модуле LCLProc:
procedure DumpExceptionBackTrace;
procedure DumpStack;
function GetStackTrace(UseCache: boolean): string;
procedure GetStackTracePointers(var AStack: TStackTracePointers);

если они не устраивают, то можно использовать реализацию этих функций.
vay
новенький
Сообщения: 22
Зарегистрирован: 06.07.2009 17:56:46

Сообщение vay »

спасибо. поэкспериментирую
Ответить