Call history data is sampled at fixed intervals during run-time, each
sample representing only a limited portion of the stack. These data
samples are subsequently automatically analyzed by merging overlapping
sampled call history sequences to build larger call graphs, according to
some pre-specified merge criterion. Preferably, the call history graphs
are annotated with counts of the execution frequency (number of times a
particular procedure was executing when the sample was collected) and the
stack frequency (number of times the procedure appeared in the sampled
stack portion) associated with each respective called procedure.
Preferably, a graphical user interface presents the user with a graphical
representation of the call graph(s) and annotations.