Difference between revisions of "leakview"

From Lazarus wiki
Jump to navigationJump to search
(PLEASE stop putting in the dialog box stuff unless you have used it yourself to debug non-trivial applications. Edit hopefully indicates reason.)
Line 37: Line 37:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
=== Irrelevant dialog box section ===
 +
{{Note|You should not see the dialog boxes below if you have properly configured heaptrc like in the example above.}}
 
On Unix systems the leakview results are stored in a file the path of which is specified. Windows displays dialog boxes like the following example:
 
On Unix systems the leakview results are stored in a file the path of which is specified. Windows displays dialog boxes like the following example:
  
  
 
[[File:Win heaptrc output no error.png|Standard output of heaptrc on Windows (despite of the title there is no error in the application)]]
 
[[File:Win heaptrc output no error.png|Standard output of heaptrc on Windows (despite of the title there is no error in the application)]]
 +
 +
Alternatively, for any non-trivial leak you may see a seemingly endless series of dialog boxes like those below - which makes debugging almost impossible.
 +
{{Warnning|Why does this section on dialog boxes keep coming back? Hopefully the info below demonstrates that not configuring heaptrc on Windows is not a smart thing to do. If wiki editors disagree, please clean up article as you see fit.}}
 +
 +
 +
[[File:leakdialog1.png|Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then]]
 +
 +
[[File:leakdialog2.png|Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then]]
 +
 +
[[File:leakdialog3.png|Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then]]
 +
 +
[[File:leakdialog4.png|Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then]]
 +
 +
[[File:leakdialog5.png|Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then]]
  
 
=== Enabling heaptrc in FPC ===
 
=== Enabling heaptrc in FPC ===

Revision as of 15:44, 24 April 2014

Overview

Leakview (Tools/Leak View or Tools/Find source lines for leak/stack-traces in Lazarus 1.3+) 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:

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.

Irrelevant dialog box section

Light bulb  Note: You should not see the dialog boxes below if you have properly configured heaptrc like in the example above.

On Unix systems the leakview results are stored in a file the path of which is specified. Windows displays dialog boxes like the following example:


Standard output of heaptrc on Windows (despite of the title there is no error in the application)

Alternatively, for any non-trivial leak you may see a seemingly endless series of dialog boxes like those below - which makes debugging almost impossible. Template:Warnning


Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then

Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then

Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then

Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then

Standard output of heaptrc on Windows (truncated at 5 dialog boxes as you probably get the point by then

Enabling heaptrc in FPC

In FPC, you can specify -gh in your compiler options or include the heaptrc unit in your uses clause (as one of the first items).

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"