Difference between revisions of "leakview"

From Lazarus wiki
Jump to navigationJump to search
Line 38: Line 38:
  
 
=== Enabling heaptrc in FPC ===
 
=== Enabling heaptrc in FPC ===
In FPC, you can specify -gh in your compiler options in fpc.cfg or on the comaandline.<br>
+
In FPC, you can specify -gh in your compiler options in fpc.cfg or on the commandline.<br>
 
You can test if your binary is compiled with heaptrace by:
 
You can test if your binary is compiled with heaptrace by:
 
<syntaxhighlight>
 
<syntaxhighlight>

Revision as of 18:20, 14 February 2017

Leakview ('[View|Leaks and Traces]') allows fast navigation trough HeapTrc leak reports.

leakview.png

Usage

Leakview reads heaptrc output. For this to work, you'll need to enable heaptrc in your code:
Never include heaptrc in your uses clause manually. This is done implicitly by the compiler when -gh is specified

Enabling heaptrc in Lazarus

To enable this in your Lazarus project: go to Project Options/Linking and in the Debugging section enable Use Heaptrc unit (check for mem-leaks) (-gh)

You can then let the program log the output of the heaptrc unit to a file. Add the following code fragments in your .lpr, at the beginning of your code to redirect the heaptrc output to file:

  {$DEFINE debug}     // do this here or you can define a -dDEBUG in Project Options/Other/Custom Options, i.e. in a build mode so you can set up a Debug with leakview and a Default build mode without it

uses
  ...
  {$IFDEF debug}
  , SysUtils
  {$ENDIF}

...

begin
  {$IFDEF DEBUG} 
  // Assuming your build mode sets -dDEBUG in Project Options/Other when defining -gh
  // This avoids interference when running a production/default build without -gh

  // Set up -gh output for the Leakview package:
  if FileExists('heap.trc') then
    DeleteFile('heap.trc');
  SetHeapTraceOutput('heap.trc');
  {$ENDIF DEBUG}

  ...
end.

Enabling heaptrc in FPC

In FPC, you can specify -gh in your compiler options in fpc.cfg or on the commandline.
You can test if your binary is compiled with heaptrace by:

{$if Declared(UseHeapTrace)}...{$ifend}

Then redirect the heaptrc output to file (instead of standard output). You can use similar code to the Lazarus code or alternatively, set the environment variable, e.g. on *nix:

export HEAPTRC="log=heap.trc"

or Windows:

set HEAPTRC="log=heap.trc"