Difference between revisions of "LazProfiler"

From Free Pascal wiki
Jump to navigationJump to search
Line 86: Line 86:
 
** last group and sort column and order is saved to settings file now
 
** last group and sort column and order is saved to settings file now
 
** refactoring
 
** refactoring
 +
* 0.2.1.0
 +
** fixed recursive directory scan
 +
** do not scan include path
 +
** ignore units belonging to packages
 +
** fixed memory leak
 +
* 0.2.1.0
 +
** Update for Lazarus 2.0
  
  
 
[[Category:Debugging]]
 
[[Category:Debugging]]
 
[[Category:Profiling]]
 
[[Category:Profiling]]

Revision as of 08:11, 1 March 2019

About

LazProfiler is an IDE addon which adds a One-Click-Profiler to Lazarus.

Screenshot

LP01.png

Download

System Requirements / Dependencies

  • FPC trunk (needs generics and additional PascalParser funktionality)
  • Lazarus trunk (revision 56254 and above)

Installation

Download from here and install manually.
It depends on LCLExtension, EpikTimer and VirtualTreeView.

Support page

http://forum.lazarus.freepascal.org/index.php/topic,38983.0.html

Using LazProfiler

Start profiling

  • Open your project (if not done already)
  • Choose Profile from Run menu:
    LP02.png
  • Use your program
  • Close your program
  • study LazProfiler output:
    LP01.png

Show output

  • Choose "Profiler Results" from View menu:
    LP03.png

Cleanup profiler

In case the instrumenting of the sources produce not compileable code you can reset the profiler and tidy things up by choosing
"Cleanup Profiler and restore original files" from Run menu:
LP04.png

Influencing profiling

Hints in source code

By default the profiling automatically starts. If you just want to profile some parts of your code you can surround it by two comments:

// start-profiler
code_to_profile;
// stop-profiler

Disable instrumenting

If you want to exclude procedures/functions/classes/units from beeing instrumented,
just uncheck the checkbox in front of the procedure/function/class/unit name
in the profiler output window.
LP05.png

Light bulb  Note: Units are onyl visible if tree is sorted by unit.

Classes are only visible if tree is sorted by class or unit.

How does it work?

When profiling is started the following steps are done:

  • project is build to test if project is okay
  • all sources in the projects unit and include directories are backuped (except units below fpc and lazarus source directories)
  • procedures and funtions in units are instrumented with special profiling code
  • project is build with instrumented code
  • instumented sources are deleted and backups are restored
  • program is run with no debugger
  • profiling result is shown when program ends

Known issues

  • Profiling does not stop counting at ShowModal, ShowMessage, ...
  • Profiling for packages in subfolders of project does not work (disable such units for the time being)

Version History

  • 0.1.0.0
    • Initial release
  • 0.1.1.0
    • leaving sources instrumented if compile after instrumenting fails
  • 0.1.2.0
    • checking if backup was successfully created before writing instrumented code to original file
  • 0.1.3.0
    • renamed menu entries
    • include IncludePath. Patch by zamtmn.
    • minor refactoring
    • fixed recognition of declared record in procedure var section
    • fixed memory leaks
  • 0.2.0.0
    • new Result-TreeView
      - group by Unit
      - group by Object
    • fixed include handling
    • last group and sort column and order is saved to settings file now
    • refactoring
  • 0.2.1.0
    • fixed recursive directory scan
    • do not scan include path
    • ignore units belonging to packages
    • fixed memory leak
  • 0.2.1.0
    • Update for Lazarus 2.0