LazProfiler is an IDE addon which adds a One-Click-Profiler to Lazarus.
- It's available on GitHub.
System Requirements / Dependencies
- FPC trunk (needs generics and additional PascalParser funktionality) or fixes_3_2
- Lazarus trunk (revision 60719 and above) or fixes_2_0
Download from here and install manually.
It depends on LCLExtension and EpikTimer.
- Open your project (if not done already)
- Activate Profiler:
- Choose "Profile" from Run menu:
- Use your program
- Close your program
- study LazProfiler output:
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
If you want to exclude procedures/functions/classes/units/packages from beeing instrumented,
just uncheck the checkbox in front of the procedure/function/class/unit/package name
in the profiler output window.
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
- Profiling does not pause counting at ShowModal, ShowMessage, ...
- Initial release
- leaving sources instrumented if compile after instrumenting fails
- checking if backup was successfully created before writing instrumented code to original file
- renamed menu entries
- include IncludePath. Patch by zamtmn.
- minor refactoring
- fixed recognition of declared record in procedure var section
- fixed memory leaks
- 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
- new Result-TreeView
- fixed recursive directory scan
- do not scan include path
- ignore units belonging to packages
- fixed memory leak
- Update for Lazarus 2.0
- profiling of packages (only if outside of Lazarus source directory)
- renamed columns "Net" -> "Σ Net", "Gross" -> "Σ Gross"
- new columns: "% Net", "% Gross", "Ø Net", "Ø Gross"
- fixed parsing of operator functions
- fixed parsing of "START-PROFILER" and "STOP-PROFILER" if inside un-instrumented procedure/function
- Activation of LazProfiler (default is inactive)