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