[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