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.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to