JProfiler帮助文档

调用跟踪器


调用树中的方法调用记录累积了具有相同调用堆栈的调用。保留精确的时间顺序信息通常是不可行的, 因为内存需求巨大,而且大量数据很难呈现解释。

然而,在有限的情况下,跟踪调用并保留整个时间顺序是有意义的。 例如,你可能想分析几个合作线程的方法调用的精确交错。 调试器不能介入这样的用例。或者,你想分析一系列的方法调用,但能前进和后退,而不是像在调试器中那样只能看一次。 JProfiler通过调用跟踪器提供了该功能。

调用跟踪器有一个单独的记录动作,可以在调用跟踪器视图中通过触发器分析API激活。 为了避免过度消耗内存的问题, 对收集的调用跟踪的最大数量设置了上限,该上限可在视图设置中配置。收集跟踪的速度很大程度上取决于你的过滤器设置。

只有当方法调用记录类型被设置为instrumentation时,调用跟踪才会工作。采样不会跟踪单个方法调用,所以从技术上讲, 不可能用采样来收集调用跟踪。 对压缩(Compact)过滤类的调用会被记录在调用跟踪器中,就像在调用树中一样。 如果你只想关注自己的类,可以在视图设置中排除这些调用。

跟踪的方法调用以树状显示,有三个层级,通过折叠方法调用,可以方便地跳过相关调用。 这三组分别是 线程、  包 和 类。 每次这些组中任何一个组的当前值发生变化时,都会创建一个新的分组节点。

在最低层级有 方法进入节点 和 方法退出节点。在调用跟踪表的下方, 显示了当前所选方法跟踪的堆栈跟踪。如果从当前方法记录了进入其他方法的调用跟踪,或者如果另一个线程中断了当前方法, 那么该方法的进入和退出节点将不相邻。你只能通过使用 上一个方法下一个方法操作在方法层级上导航。

跟踪和所有分组节点上显示的时间默认是指第一个跟踪,但可以更改为显示自上一个节点的相对时间。 如果上一个节点是父节点,那么该差值将为零。还可以选择显示与上一个同类型节点的相对时间。

即使使用适当的过滤器,也会在很短的时间内收集到大量的跟踪数据。为了排除那些不感兴趣的跟踪, 调用跟踪器允许你快速地切除显示的数据,例如,某些线程可能不相关,或者可能不感兴趣的某些包或类的跟踪。 另外,递归方法的调用可能会占用很多空间,你可能希望只排除那些单个方法。

你可以通过选择节点并按删除键来隐藏节点。所选节点的所有其他实例和所有相关的子节点也将被隐藏。 在视图的顶部,你可以看到所有记录的跟踪中仍有多少调用跟踪被显示。 要再次显示隐藏的节点,你可以点击显示隐藏工具栏按钮。