dotTrace 2025.2 Help

调用树

调用树 显示方法执行路径。 树中的每个方法节点表示由某个线程执行的顶级方法。 方法节点列出了它调用的方法以及在分析期间收集的指标。

使用 调用树

为了帮助您进行深入的调用栈分析, 调用树 提供以下功能:

调用树

1 在调用中花费的时间占所选总时间的百分比。

2 方法的简短名称。

3 在调用及其子树中花费的总时间。 请参阅以下详细信息。

4 方法的完整名称。

如何计算调用时间

为了更好地理解 调用树 如何计算时间,请参考示例。

调用树示例

调用树 将按以下方式计算时间:

调用树示例

探索最耗时的调用

浏览应用程序中所有最“耗性能”方法的最简单方法是使用 下一个重要调用 操作( Ctrl + Shift + Right )。 此操作会将您导航到下一个具有高自身时间的调用。 如果在当前子树中未找到此类调用,该操作将导航到当前选定节点的下一个同级节点。

浏览最耗性能的方法

  1. 调用树 中选择一个方法。 此方法将是您的起点。

  2. Ctrl + Shift + Right 或在上下文菜单中选择 下一个重要调用

  3. 重复步骤 2,浏览应用程序中的所有重要调用。

限定到特定的方法调用

为了简化对某个执行路径的分析,您可以将 调用树 范围限定到一个特定的方法调用。

限定到一个特定的方法调用

  1. 调用树 中选择一个方法。

  2. Ctrl + Enter 或在上下文菜单中选择 限定为此作用域

打开特定方法调用后,它将成为 调用树 中的根节点。 除选定节点的子树外,所有其他调用都将被隐藏。 这也会自动应用一个按选定方法出现情况的过滤器。 请参阅本节接下来的过滤器详细信息。

调用树示例

例如,如果在上述示例中,您决定将范围限定到 UserMethod2 调用(标记为 B), 调用树 将显示如下并计算时间:

调用树示例

如果一个方法从多个地方被调用,您可以在一个页面内合并所有方法调用的出现情况。

合并并显示所有方法调用的出现情况

  1. 调用树 中选择一个方法。

  2. Ctrl + Shift + Enter 或从上下文菜单中选择 合并方法出现次数 项。

之后,选定的方法将成为 调用树 中的根节点,包含所有出现情况。 所有其他调用将被隐藏。 这也会自动应用一个按方法出现情况及其子树的过滤器。

调用树示例

例如,如果在上述示例中,您决定查看所有 UserMethod2 调用的合并情况, 调用树 将显示如下并计算时间:

调用树示例

要返回到之前的调用树根节点,请点击顶部的 返回 返回按钮。

回溯视图模式

调用树 聚焦于一个方法出现情况时,您可以使用 调用树 顶部的相应控件,将 调用树 切换到 回溯 模式。

回溯 模式中,您可以从下往上查看哪些函数调用了特定函数。 换句话说, 回溯调用树 视图的反转。

调用树示例

例如,如果在上述示例中,您决定打开 UserMethod2 调用(标记为 B), 调用树 将显示 UserMethod2 调用的方法:

调用树示例

如果您将 调用树 切换到 回溯 模式,它将显示以调用 UserMethod2 结束的执行路径,或者换句话说,树的上半部分:

调用树示例

按线程分组调用

为了简化多线程应用程序的分析,请按线程分组调用栈。 为此,请点击调用树中的 按线程分组

按线程分组

按名称查找方法

按名称查找方法

  1. 执行以下操作之一:

    • 从主菜单中选择 编辑 | 查找函数

    • Ctrl+F

  2. 开始输入。 在输入时,查找列表会缩小范围,建议与输入字符串匹配的名称。 请注意,您可以使用 CamelCase 表示法。 它不区分大小写,因此 'gfnames' 和 'GFNames' 没有区别。

    调用树查找方法
  3. 从列表中选择一个类或方法,然后按 输入

找到的方法将成为一个根节点,包含其所有出现情况的调用子树。 这也会应用按方法出现次数及其子树的筛选器。

在浏览调用树时,总是会遇到一个问题,即如何理解您是如何到达特定调用的。 您可以通过启用 导航路径显示当前调用树过滤路径 模式来简化导航。 在此模式下,所有的跳转都会显示在 调用树 的边栏中,因此始终可以清楚地知道树中聚焦的节点位置。

调用树示例

例如,如果在上述示例中,您决定打开 UserMethod2 调用(标记为 G ),通常会显示为:

导航路径示例

如果您启用了 导航路径示例显示当前调用树过滤路径 模式, 调用树 还会显示整个导航路径:

导航路径示例

这同样适用于合并的调用实例。 例如,如果您不是聚焦于某个特定的 UserMethod2 实例,而是打开所有合并的方法实例, 调用树 将显示如下:

导航路径示例

请注意,树的不同部分如何用单个 ...(任何代码) 节点表示。

调用树如何作为过滤器工作

当您限定到一个特定的方法出现情况或合并的方法出现情况时, 调用树 作为按方法出现情况的过滤器工作。

应用过滤器后,其他过滤器将仅显示所选方法出现情况(包括子树)执行时的时间区间数据。

调用树作为火焰图

火焰图是 调用树 的图形表示。 每个调用显示为一个水平条,其长度取决于调用的总时间,总时间等于函数的自身时间加上其所有子函数的时间。 调用时间越长,条形越长。 要打开图表,请点击 火焰图 中的 调用树。 这将为当前树构建图表。

火焰图
最后修改日期: 2025年 9月 28日