[fpc-pascal] showing source linenumbers on exceptions
Vincent Snijders
vsnijders at quicknet.nl
Tue Jun 28 08:40:05 CEST 2005
Peter Vreman wrote:
>>hi,
>>
>>how can i show source line numbers, when an exception occurs, like
>>sysutils do?
>>...
>>An unhandled exception occurred at $0040E9B5 :
>>EInOutError : Invalid filename
>> $0040E9B5 TDXF__LOAD, line 271 of dxffile.pas
>> $0040EFFA TDXF__CREATE, line 329 of dxffile.pas
>> $0040F24A TPAPER__CREATE, line 48 of dxfpaper.pas
>> $00401459 INIT_OBJECTS, line 63 of e:/_development/work/dxf2mcr.pas
>> $00401529 INITPROC, line 87 of e:/_development/work/dxf2mcr.pas
>> $00401F1F INIT_FRAMEWORK, line 107 of
>>E:/_development/units/uframe_sdlogl.pas
>>...
>>
>>the only thing i found is the ShowExeption proc. but this does not write
>>what i expected.
>>...
>>exception at 0040EA45:
>> Invalid filename.
>>...
>>
>>is there a possibility to do this on my own?
>>if found the proc:
>>...
>>Procedure CatchUnhandledException (Obj : TObject; Addr: Pointer;
>>FrameCount: Longint; Frames:
>>PPointer);[public,alias:'FPC_BREAK_UNHANDLED_EXCEPTION'];
>>...
>>but i don't how to set FrameCount and Frames.
>
>
> The current code in svn trunk contains an ExceptFrames and
> ExceptFramecount function to return this information. See the lazarus code
> how to use the functions.
>
To be precise, in the lclproc unit (lazarus\lcl\lclproc.pas) you can
find a DumpExceptionBackTrace. If you call this procedure in you except
block, you get the result that you want.
If you don't want to add a dependency on the lcl in your code, you can
copy the code in this procedure and replace debugln by writeln. DebugLn
is like a writeln, but it can be redirected to file and does not crash
if it is used in a windows gui application, see
http://lazarus-ccr.sourceforge.net/kb/index.php/Lazarus_Faq#How_can_I_see_debug_output.3F)
Vincent.
More information about the fpc-pascal
mailing list