本页内容

分析代码

操作指南:分析

使用集成的代码分析工具执行静态代码分析、检测内存泄漏、分析 CPU 和内存使用情况、检查代码覆盖率,并可视化跟踪事件。

使用代码分析工具

要使用代码分析工具,请在“Analyze ”菜单中或“开始调试启动项目 ”(Start Debugging of Startup Project )按钮的下拉菜单中选择相应工具。在“Debug ”模式下,可通过在调试器工具栏的菜单中选择工具来切换分析工具。

调试模式下的性能分析器

在“Debug ”模式下,可将视图拖动到屏幕上的新位置。视图的大小和位置会保存下来,供以后的会话使用。选择“View ” > “Views ” > “Reset to Default Layout ”可将视图重置为原始大小和位置。

代码分析工具概述

下表介绍了可在Qt Creator 中用于分析代码的代码分析工具。其中部分工具已内置于Qt Creator 中,而其他工具则可单独安装在计算机上,或从服务器运行。

工具语言可用性描述
Axivion SuiteC、C++、C#需要 Axivion 服务器分析代码、架构、依赖关系、指标和编码规范。
Clang-Tidy 和 ClazyC、C++、Objective-C内置检测风格违规、接口误用以及 Qt 特有的问题,并应用修复方案。
Chrome 跟踪格式可视化工具任意内置探索由第三方工具生成的 Chrome 跟踪格式数据。
CocoC、C++、C#、QML、Tcl需要安装查找未经测试的代码、冗余测试和死代码。
CppcheckC、C++需要安装无需运行应用程序,即可在 C 和 C++ 代码中查找未定义行为和危险的编码结构。
Heob任意需要安装(Windows)在 Windows 上查找内存泄漏和缓冲区溢出。
性能分析器任意内置(Linux)分析应用程序在 Linux 桌面和嵌入式设备上的 CPU 和内存使用情况。
QML ProfilerQML、JavaScript内置查找应用程序中常见性能问题(例如运行缓慢和无响应)的根源。
针对 QML 和 JavaScript 的静态检查QML、JavaScript内置查找代码中的常见问题,例如语法错误、属性缺失和类型不匹配。
Valgrind任意需要安装(仅限 Linux、macOS 10.9-11.0 及 Intel 平台)检测内存泄漏、内存错误和线程问题。

C 和 C++ 的静态分析

Axivion Suite

Axivion Suite是一款企业级软件质量套件,可追踪架构一致性、强制执行全团队编码规范,并衡量连续构建过程中的质量趋势。它支持 C、C++ 和 C# 语言。

借助 Axivion Suite,您可以:

  • 检查源代码中是否存在潜在的运行时错误。
  • 利用指标生成关于源代码内部质量的定量信息。
  • 运行风格检查,确保符合编码规范。
  • 检测源代码中的重复代码和相似代码片段。
  • 识别不同层级的循环依赖关系。
  • 检测不可达代码。

安装 Axivion Suite 并在Qt Creator 中启用 Axivion 插件,以查看分析结果,包括违规项、指标和内联注释。

有关更多信息,请参阅:

Clang-Tidy 和 Clazy

Qt Creator 内置了对Clang-TidyClazy 的支持,这两者是针对 C、C++ 和 Objective-C 代码的互补静态分析工具。默认情况下,在您编辑打开的文件时,系统会实时显示诊断结果。这使您无需等待单独的构建步骤,即可保持代码质量和一致性。

Clang-Tidy 可检查典型的编程错误,例如风格违规、接口使用不当以及可能导致错误的代码模式。它还针对检测到的许多问题提供自动修复功能,包括对旧版 C++ 代码的现代化改造。

Clazy 在 Clang 诊断的基础上增加了针对 Qt 的特定检查,范围涵盖从不必要的内存分配到 Qt API 的误用。Clazy 还提供了重构操作,用于修复其发现的部分问题。

如需了解更多信息,请参阅:

Cppcheck

Cppcheck是一款轻量级的静态分析工具,专注于在 C 和 C++ 代码中查找未定义行为和危险的编码结构。它无需构建或运行应用程序即可分析源代码。

Cppcheck 可检测多种问题,包括数组越界访问、空指针解引用、未初始化变量使用、资源泄漏以及可疑的整数运算。有关检查项的完整列表,请参阅Cppcheck:检查项列表

请单独安装 Cppcheck,并在Qt Creator 中启用 Cppcheck 插件以集成分析结果。Cppcheck 会自动对打开的文件进行分析,您也可以通过Analyze >Cppcheck 手动对选定的文件运行分析。

有关更多信息,请参阅《使用 Cppcheck 检测 C++ 代码中的错误》。

QML 和 JavaScript

QML 和 JavaScript 的静态检查

借助内置的静态分析器,您可以对项目中的 QML 和 JavaScript 代码运行静态检查,以查找常见问题,这与使用JSLint 的原理类似。

这些检查可在无需运行应用程序的情况下,捕获语法错误、缺失或拼写错误的属性、类型不匹配以及其他常见错误。

有关更多信息,请参阅JavaScript 和 QML 检查

QML Profiler

Qt Creator 随附的QML Profiler 可在运行 QML 代码时检查绑定评估和信号处理。利用它可识别仅靠代码检查难以发现的性能瓶颈。

QML Profiler 该工具会记录事件(如信号处理、绑定评估和 JavaScript 执行),并在时间轴视图中进行可视化展示。这对于诊断运行缓慢和无响应问题非常有用。

有关更多信息,请参阅:

内存分析

Valgrind

Valgrind 工具套件中安装 Memcheck 和 Callgrind,并在Qt Creator 中启用 Valgrind 插件,以便在 Linux 和 macOS(10.9-11.0,仅限 Intel 架构)上检测内存错误并分析函数执行情况。您可以从任何开发主机上在远程 Linux 机器或设备上运行这些工具。

Memcheck 可检测内存管理问题,例如对已释放内存的读写操作、使用未初始化的内存、内存泄漏以及分配函数的使用错误。Callgrind 则记录函数的调用历史和缓存使用统计信息。

您既可以在开发主机上本地运行 Valgrind 工具,也可以在另一台主机上远程运行。无论是在Qt Creator 中已创建项目的应用程序,还是尚未创建项目的应用程序,均可使用这些工具进行分析。

若要运行 Valgrind 工具来分析已创建项目的应用程序,请在Qt Creator 中打开该项目,并选择用于运行该项目的套件。该套件指定 Valgrind 工具是在本地还是远程运行。

要设置 Valgrind 工具的偏好设置,请选择“Preferences ”>“Analyzer ”>“Valgrind ”。您可以在项目的“Run Settings ”中,针对每个项目覆盖通用设置。

有关更多信息,请参阅:

Heob

在 Windows 上,安装 Heob 堆观察器以检测缓冲区溢出和内存泄漏。

当发生缓冲区溢出时,Heob 会触发访问违规,并记录引发问题的指令和缓冲区分配的堆栈跟踪。在 Heob 正常退出后,您可以查看结果。

有关更多信息,请参阅:

性能分析与跟踪

性能分析器

在 Linux 上,使用 Performance Analyzer 分析 Linux 桌面和嵌入式设备上应用程序的 CPU 和内存使用情况。

Performance Analyzer 使用 Linux 内核自带的 Perf 工具,定期对应用程序的调用链进行快照,并将其以时间轴视图或火焰图的形式可视化。

有关更多信息,请参阅“性能分析器”。

Chrome 跟踪格式可视化工具

使用 Chrome 跟踪格式可视化工具查看 Chrome 跟踪事件。当查看使用内置 trace-viewer(chrome://tracing )难以可视化的庞大跟踪文件时,此工具尤为有用。

除基于 Chrome 的工具外,还有其他几款跟踪工具可以生成关于 Chrome 跟踪事件的 Chrome 跟踪格式信息。借助该可视化工具,您可以浏览、缩放并检查跟踪中的事件。

有关更多信息,请参阅:

代码覆盖率

Coco

安装 Coco 代码覆盖率工具链,并在Qt Creator 中为 C、C++、C#、QML 和 Tcl 程序启用 Coco 插件。例如,可将其作为测试套件的一部分,用于分析应用程序的运行方式。利用分析结果,使测试更加高效且全面。

您可以:

  • 查找未被测试的代码段。
  • 查找冗余测试并予以删除。Coco 可以识别已被测试覆盖的源代码部分,并能检测新测试是否覆盖了现有测试未覆盖的源代码行。
  • 通过显示从未被执行的代码来查找死代码。
  • 计算最佳测试执行顺序,以在每次运行中最大限度地提高测试覆盖率。这对手动测试特别有用。
  • 分析应用程序的两个不同版本并比较差异。这使得能够查看哪些测试受到源代码修改的影响,同时也能衡量补丁或热修复的测试覆盖率。
  • 测量应用程序和测试的执行时间。

有关更多信息,请参阅:

另请参阅: 为项目激活套件操作指南:分析分析器以及启用和禁用插件

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.