剖析函数执行

利用Valgrind 工具套件中的 Callgrind 工具,您可以发现与函数执行相关的问题。将 Callgrind 生成的数据文件加载到KCachegrind配置文件数据可视化工具中,以浏览性能结果。

下载并安装 Valgrind 工具和 KCachegrind 后,您可以从Qt Creator 使用 Callgrind 和 KCachegrind。

注意: 您可以在 Linux 本地安装并运行 Callgrind 和 KCachegrind。您可以从任何计算机在远程 Linux 机器或设备上运行 Callgrind。

构建用于剖析的应用程序

Callgrind 会记录应用程序运行时执行的函数的调用历史。它会收集执行指令的数量、这些指令与源代码行的关系、函数之间调用者和被调用者的关系以及此类调用的数量。您还可以使用缓存模拟或分支预测来收集有关应用程序运行时行为的信息。

由于调试构建配置和发布构建配置的运行时特性差别很大,针对一种构建配置的分析结果可能与另一种构建配置无关。对调试构建进行剖析往往会发现大部分时间都花在了底层代码上,如容器实现,而在同一应用程序的发布构建的剖析中,由于通常会进行内联和其他优化,同样的代码不会显示出来。

许多最新的编译器允许您在构建优化的应用程序时同时显示调试信息。例如,GCC 的典型选项有-g -O2.建议使用这样的设置进行 Callgrind 分析。

收集数据

分析应用程序:

  1. 转到Projects 模式,选择版本构建配置。
  2. 在模式选择器中,选择Debug >Callgrind

    Callgrind 视图工具栏

  3. 选择开始 启动应用程序。
  4. 使用应用程序进行分析。
  5. 选择停止 ,在Functions 视图中查看分析结果。

选择暂停 可在剖析过程中暂停事件记录,从而加快程序执行速度。暂停记录时不会计算任何事件。

选择重新加载 可重置所有事件计数器。

选择清洁 可丢弃所有收集的数据。

选择KCachegrind 在 KCachegrind 中查看数据。Qt Creator 启动 KCachegrind 并将数据加载到其中以进行可视化。

查看收集的数据

分析结果显示在Callgrind 视图中。您可以分离视图并移动它们。要恢复更改,请选择Views >Reset to Default Layout

选择Views 可显示或隐藏视图和视图标题。Visualization 视图默认为隐藏。选择重做 可在显示时刷新其中显示的数据。

作为收集数据的替代方法,您可以选择开放 ,将外部日志文件加载到Callgrind 视图中。

Callgrind 观点

Filter 字段中输入字符串以过滤结果。

将光标移至Functions 视图中的函数上,以获取更多相关信息。

双击函数可查看Callers 视图中调用函数的信息和Callees 视图中被调用函数的信息。

要在Callee 视图中的函数间移动,请选择上一页下一页

要设置成本格式,请选择$ 。您可以查看绝对成本或相对成本,以及与父级的相对成本。选择过滤器 可仅查看源于项目的剖析信息。

要正确处理递归或循环函数调用,请选择O 启用循环检测。

要在显示函数名时移除模板参数列表,请选择<>

另请参阅 "使用 Memcheck 检测内存泄漏"、"剖析函数执行情况"、"在外部应用程序上运行 Valgrind 工具"、"为项目指定 Valgrind 设置"、"Valgrind Callgrind ""Valgrind Memcheck"。

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.