Codetrack provides a wide range of options for profiling:The rocket tale (part I): Sampling vs Tracing
In this mode, the threads of your process are being suspended periodically and a snapshot of the call stack for every thread
is taken. Use this mode to get a general idea about the performance of your code.
Since snapshots are made periodically, this method does NOT capture every method call. This is the profiling mode that has the least impact on the performance of your process. The captured amount of data is relatively small and is processed very quickly.
Tracing means that EVERY call will be captured and all measurements will be 100% accurate. The more options you enable, the
more information you will get, but the bigger your captured data will be and the slower your application
will run. It will result in the same performance tree as the sampling mode, but here the timings
will be exact and every call will be included. In tracing mode you also get a precise invocation
count for every method.
Tracing does not trace start and stop times for each call. It results in a virtual timeline where calls to the same method are grouped together into one larger block. More info on virtual timelines can be found here: Virtual Timelines
Trace filters enable you to select the code you want to be profiled. This can be done based on:
DeepTrace is the most advanced mode. Here you can enable predefined rulesets (provided by plugins or your own library). Use
the pencil to add another ruleset just for the current session (if you're really happy with your
created ruleset, you can promote it to your library). These rulesets are very similar to trace filters.
Except that they define the methods that will have their start and stop time traced. Also arguments
can be traced for these methods. For more info on rulesets goto
On top of methods, also fields can be specified to be traced when their parent type is traced as an argument, instance or return value.
It is also possible to combine (regular) tracing with deeptrace by selecting 'Enable regular trace'. This allows you to deeptrace just a few methods and still have all methods in your timeline. For this default tracing you can also use the Filtering as mentioned under Tracing.
Bear in mind that deeptracing lots of calls can have a big impact on the performance of your application!