Tracy 是一款专为游戏和性能敏感型应用设计的实时、纳秒级分辨率、远程遥测混合帧分析器
Tracy 是一款专为游戏和性能敏感型应用设计的实时、纳秒级分辨率、远程遥测混合帧分析器。它支持CPU、GPU、内存分配、锁、上下文切换等多维度性能分析,并允许在应用运行时远程连接,实时查看性能数据,被誉为“RAD Telemetry 与 Intel VTune 的结合体,且功能更强大”。
本教程将指导你完成Tracy的完整部署,包括服务端获取、客户端集成与使用。
一、Tracy 的核心架构
在开始前,理解其架构有助于后续操作:
- 客户端 (Client):即被你进行性能分析的应用。你需要在其代码中集成Tracy的客户端库,并在编译时启用。
- 服务端 (Server):即
tracy-profiler图形界面程序,用于连接客户端,实时接收、显示和分析性能数据。
两者通过网络(默认TCP端口8086)进行通信。
二、部署步骤
步骤 1:获取 Tracy 服务端 (tracy-profiler)
首先,你需要获得用于查看性能数据的图形界面程序。
方式一:使用包管理器安装(推荐)
这是最简单的方式,适用于多数操作系统。
| 操作系统 | 包管理器 | 命令 |
|---|---|---|
| macOS | Homebrew | brew install tracy |
| Linux | Nix | nix profile install nixpkgs#tracy |
| Windows | Scoop | scoop install extras/tracy |
| Windows | Winget | winget install --id wolfpld.tracy -e |
方式二:下载预编译二进制文件 (Windows)
访问 Tracy GitHub Releases 页面,下载最新版本的 Tracy-<version>.7z 压缩包,解压后即可得到 tracy-profiler.exe 等工具。
方式三:从源代码编译 (Linux / macOS)
如果需要自定义或包管理器不可用,可从源码编译:
bash
1 | # 1. 克隆指定版本的源码(例如 v0.13.0) |
步骤 2:在你的项目中集成 Tracy 客户端
要让Tracy能够分析你的程序,需要将Tracy的客户端代码集成到项目中。
1. 添加客户端文件
将 tracy/public 目录下的所有文件(主要是 tracy/Tracy.hpp 和相关头文件)复制到你的项目源码目录中。
2. 包含头文件
在你需要加入性能分析功能的源文件中包含主头文件:
cpp
1 | #include "tracy/Tracy.hpp" |
3. 定义框架标记 (Frame Mark)
Tracy以“帧”(Frame)为基本分析单元。在你的主循环(如游戏循环或事件循环)的每一帧末尾,调用 FrameMark 宏:
cpp
1 | while (true) { |
4. 标记分析区 (Zone)
在你的关键函数内部,可以使用 ZoneScoped 宏来标记一段需要详细分析的代码块(Zone)。当进入该作用域时开始计时,退出时结束:
cpp
1 | void yourCriticalFunction() { |
你还可以用 ZoneText、ZoneColor 等宏为Zone添加元数据,便于分析。
5. 链接客户端库
根据你的构建系统,链接Tracy客户端库。
- CMake项目:可以通过
add_subdirectory(tracy)和target_link_libraries(your_target TracyClient)集成。 - 直接编译:在编译时,需要包含
public目录,并定义TRACY_ENABLE宏。
步骤 3:构建与分析
1. 构建启用Tracy的应用
Tracy客户端默认是禁用的,以避免性能开销。在编译时需要显式启用:
bash
1 | # 在编译命令中定义 TRACY_ENABLE 宏 |
重要提示:请对Release优化版本(如 -O2/-O3)进行性能分析,因为Debug版本的性能特征与实际发布版本差异巨大,分析结果可能无效。
2. 启动应用与连接
- 首先,运行步骤1中获取的
tracy-profiler程序。 - 然后,启动你已集成Tracy并构建好的应用。
- 在Tracy服务端界面,你应该能看到一个名为你应用进程的可连接项目,点击 “Connect” 按钮进行连接。
3. 开始分析
连接成功后,你将看到实时的性能数据流,包括:
- 时间线视图:直观展示各线程、各Zone的执行时间和调用关系。
- 帧时间直方图:显示帧耗时分布,帮助快速定位卡顿帧。
- CPU数据视图:展示线程在CPU核心上的调度情况、上下文切换等。
- 统计窗口:提供各函数的调用总耗时、调用次数等聚合统计数据,帮助定位热点函数。
收集到足够数据后,点击 “Stop” 按钮可以保存当前追踪文件(.tracy)以便后续分析。
三、常用附加工具
Tracy安装包中附带了一些实用命令行工具:
tracy-capture:无需打开GUI,直接在命令行捕获程序性能数据并保存为.tracy文件。tracy-csvexport:将.tracy追踪文件导出为CSV格式,便于在其他工具中进一步分析。tracy-update:用于更新追踪文件格式。
四、关键配置选项
为了在生产环境或按需分发的应用中控制分析器行为,可以使用以下预处理器定义:
| 编译定义 | 作用 |
|---|---|
TRACY_ENABLE |
必需。全局启用Tracy客户端。 |
TRACY_ON_DEMAND |
按需模式。客户端代码仍然编译进程序,但只有当Tracy服务端主动连接时,才开始收集和发送数据,平时几乎无额外开销。这是发布版本的首选方案。 |
TRACY_NO_FRAME_IMAGE |
禁用帧截图功能,可略微减少开销。 |
TRACY_NO_CALLSTACK |
禁用调用栈采样,可显著减少追踪文件大小和性能开销。 |
五、常见问题排查
- Tracy服务端列表中找不到应用进程:
- 确认应用已成功启动并运行。
- 检查应用编译时是否定义了
TRACY_ENABLE。 - 检查防火墙设置,确保端口8086未被阻止。
- 确保Tracy服务端与你的应用在同一台机器或同一局域网内。
- 应用运行速度变慢:
- 这是正常现象,启用性能分析本身会带来一定的性能开销。
- 仅在需要进行性能分析时编译
TRACY_ENABLE版本,平时使用不带此宏的版本。
- 性能数据不完整或缺少Zone:
- 确认在需要分析的函数中正确使用了
ZoneScoped等宏。 - 确认编译时未使用
TRACY_NO_CALLSTACK等会限制功能的宏。
- 确认在需要分析的函数中正确使用了
总结
你已经完成了Tracy Profiler的完整部署流程:从获取服务端、集成客户端、构建应用到连接分析。Tracy强大的实时、低开销分析能力,将帮助你在纳秒级别精度上洞察应用性能瓶颈。
下一步建议:在关键代码路径中加入更多Zone标记,结合CPU数据视图和统计面板,系统性地优化你的应用。完整的API说明和高级用法,请查阅Tracy官方文档(通常位于其GitHub Release页面或源码的 manual 目录中)。




