On 24.12.2010 17:25, Peter E Williams wrote:
Is there a tutorial on how to use this? My application which I am
currently developing are for Lazarus not Free Pascal so I would need
something which has a GUI interface ?!? Or am I wrong?


"-gl" allows you to e.g. dump an exception back trace from within your program. This happens normally if an exception isn't caught and raises through the main Pascal block (the "begin ... end." block in the "program" file).

On the command line FPC will then print something like this:

An unhandled exception occurred at $080480BD :
Exception : Some evil exception
  $080480BD  TMYOBJECT__METHOD1,  line 15 of backtrace.pp
  $08048110  PROC3,  line 22 of backtrace.pp
  $08048148  PROC2,  line 30 of backtrace.pp
  $08048158  PROC1,  line 35 of backtrace.pp
  $0804816D  main,  line 39 of backtrace.pp

You can even print that yourself if you don't have a StdOut available:
The procdure DumpExceptionBackTrace which is available through the system unit allows you to print such a stack trace to a custom file (Pascal style file).

E.g. (untested, but correct code should be at least similar):

var
  f: Text;
begin
  Assign(f, '/tmp/mybacktrace.txt');
  Rewrite(f);
  try
    SomeExceptionRaisingCode;
  except
    on e: Exception do begin
      Writeln(f, e.ClassName, ' : ', e.Message);
      DumpExceptionBackTrace(f);
    end;
  end;
  Close(f);
end;

This will print the output from above to the file '/tmp/mybacktrace.txt'. If you assign a stream to a text file (using the unit streamio) you can even write to a TStream descendant of your choice and do some nice things. Or you could wrap the dbugintf unit like streamio wraps TStream to dump such an exception back trace to a running debugserver. The possibilities are near endless :)


    Afaik memproof (which is like AQTime-lite) needs explicitely debug
    format
    support, and that's why it doesn't work after D7. For decent traces
    it also
    required the TD32 debuginfo to be turned on, and I doubt it understands
    stabs or dwarf.


Yes, correct. You need to [ ] Optimization (uncheck) and [x] TD32 debug
info (check it) and there is probably another option also. Please
install it and read the help file.

stabs or dwarf are new technologies to me. I know nothing about these
things.
:(


Stabs and DWARF are the debug formats supported by Free Pascal. They are used in other Open Source software as well (e.g. gcc) unlike the proprietary TD32 debug format. Take a look at the units rtl/inc/lineinfo.pp and rtl/inc/lnfodwrf.pp. Using the public function GetLineInfo you can retrieve the function/procedure/method name, the unit name and the source line of a given address within your program (if it was compiled with "-gl" at least).

Regards,
Sven

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to