Вот и думаю, куда бы подцепиться в приложении free pascal чтобы получать уведомления о возникших exception для их логирования.
FPC и Call Stack
Модератор: Модераторы
FPC и Call Stack
Всем доброго дня. Никто не сможет посоветовать метод глобального перехвата exception в приложении? То есть - возник exception в коде, я его в нужном мне месте обработал (вывел в лог), и вернул управление туда, куда бы оно и пришло без моего вмешательства. Ибо для Delphi такую возможность имею, а при сборке под FPC оказалось, что сущность RTLUnwindProc: Pointer; в нем не существует 
Вот и думаю, куда бы подцепиться в приложении free pascal чтобы получать уведомления о возникших exception для их логирования.
Вот и думаю, куда бы подцепиться в приложении free pascal чтобы получать уведомления о возникших exception для их логирования.
если я не ошибаюсь, для перехвата исключений есть глобальная переменная:
ExceptProc : TExceptProc
утилиты для просмотра стека:
для FPC
Procedure Dump_Stack(var f : text;bp:pointer);
в качестве bp, узатель из функции get_frame
procedure DumpExceptionBackTrace(var f:text);
для Lazarus-а
в модуле LCLProc:
procedure DumpExceptionBackTrace;
procedure DumpStack;
function GetStackTrace(UseCache: boolean): string;
procedure GetStackTracePointers(var AStack: TStackTracePointers);
если они не устраивают, то можно использовать реализацию этих функций.
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);
если они не устраивают, то можно использовать реализацию этих функций.
спасибо. поэкспериментирую
