JProfiler帮助文档

调用跟踪器 (Call Tracer)

调用树中的方法调用记录会将具有相同调用栈的方法调用进行累积。通常无法保留精确的时间顺序信息,因为这会占用大量内存,并且记录的数据量会导致分析变得非常困难。

然而,在某些有限的场景下,跟踪调用并保留完整的时间顺序序列是有意义的。例如,您可能希望分析多个协作线程的方法调用之间的精确交错情况。调试器无法逐步执行此类用例。或者,您希望分析一系列方法调用,并能够前后切换查看,而不是像在调试器中那样只能看到一次。JProfiler 通过调用跟踪器 (Call Tracer) 提供了此功能。

调用跟踪器 (Call Tracer) 拥有独立的记录操作,可以在调用跟踪器视图 (call tracer view) 中激活,也可以通过触发器 (trigger)profiling API启用。为避免内存消耗过大,系统会对收集到的调用跟踪 (call trace) 数量设置上限。该上限可在视图设置 (view settings) 中进行配置。实际收集到的跟踪数量与您的过滤器设置密切相关。

只有当方法调用记录类型设置为插桩 (instrumentation) 时,调用跟踪 (call tracing) 才能工作。采样 (sampling) 不会跟踪单个方法调用,因此技术上无法通过采样收集调用跟踪 (call trace)。对 compact-filtered 类的调用会像在调用树 (call tree) 中一样被记录在调用跟踪器 (call tracer) 中。如果您只想关注自己的类,可以在视图设置 (view settings) 中排除这些调用。

被跟踪的方法调用以树状结构显示,共有三级分组,便于通过折叠跳过相关调用。这三组分别是  线程 (threads),  包 (packages) 和  类 (classes)。每当这些分组中的当前值发生变化时,都会创建一个新的分组节点 (node)。

在最底层是  方法进入 (method entry) 和  方法退出 (method exit) 节点 (node)。在调用跟踪 (call trace) 表格下方,会显示当前选中方法跟踪的调用栈 (call stack)。如果从当前方法记录了对其他方法的调用跟踪,或有其他线程中断了当前方法,则该方法的进入和退出节点不会相邻。您只能通过上一个方法 (Previous Method)下一个方法 (Next Method)操作在方法级别进行导航。

跟踪和所有分组节点上显示的时间默认指向第一次跟踪,但可以切换为显示自上一个节点以来的相对时间。如果上一个节点是父节点,则该差值为零。也可以选择显示相对于同类型上一个节点的相对时间。

即使设置了合适的过滤器,也可能在极短时间内收集到大量跟踪。为排除无关跟踪,调用跟踪器 (call tracer) 允许您快速裁剪显示的数据。例如,某些线程可能不相关,或者某些包或类中的跟踪不感兴趣。此外,递归方法调用可能占用大量空间,您可能只想排除这些单独的方法。

您可以通过选中节点并按下delete键来隐藏节点。所有其他实例的选中节点及其所有子节点也会被隐藏。在视图 (view) 顶部,您可以看到所有已记录调用跟踪 (call trace) 中当前仍显示的数量。要重新显示隐藏的节点,可以点击工具栏上的显示隐藏 (Show Hidden)按钮。