Tracy 是一个轻量且高效的 C++ 实时性能剖析工具,支持细粒度 CPU 与 GPU 性能追踪,适用于游戏和图形应用。通过集成 TracyClient.cpp 和 TracyClient.hpp 到项目中,并定义 TRACY_ENABLE 宏,即可启用性能监控。使用 ZoneScoped 可自动标记函数作用域耗时,FrameMark 标记帧边界,便于在可视化工具中观察帧时间分布。编译时需链接 pthread、dl 等系统库并开启调试信息(-g)。启动编译生成的 tracy-release 服务器程序后,客户端会自动通过 8086 端口连接并传输数据,支持本地或远程分析。在 GUI 中可实时查看线程时间轴、内存分配、上下文切换及热点函数统计等信息,帮助快速定位性能瓶颈。整个集成过程简单,对运行性能影响小,适合开发与调优阶段使用。

Tracy 是一个功能强大的 C++ 实时性能剖析器,支持细粒度的 CPU 和 GPU 性能追踪,特别适合用于游戏、图形应用或对实时性要求较高的程序。它不仅能记录函数调用时间,还能可视化线程活动、内存分配、帧边界、自定义事件等。下面介绍如何在 C++ 项目中快速集成 Tracy 并进行基本的性能分析。
1. 下载并编译 Tracy Profiler
Tracy 包含两个部分:客户端(嵌入到你的程序中)和服务器(独立的可视化界面)。
前往 Tracy 官方仓库 下载源码:
- 克隆仓库:
git clone https://www.php.cn/link/d8e917c6af68b61ef2b3ba045c3436f4.git - 进入 profiler 目录,编译可视化工具(需要 Qt):
cd tracy/profiler && qmake && make(Linux/macOS)
Windows 用户可使用 Visual Studio 打开 .pro 文件进行构建。
编译完成后会生成 tracy-release 可执行文件,这就是用来查看性能数据的 GUI 工具。
立即学习“C++免费学习笔记(深入)”;
2. 在 C++ 项目中集成 Tracy 客户端
将 Tracy 客户端集成到你的项目非常简单,只需几个步骤:
- 从
tracy/client/目录复制以下文件到你的项目中:TracyClient.cppTracyClient.hpp
- 确保你的构建系统能编译
TracyClient.cpp,并链接必要的系统库(如 pthread、dl 等) - 在需要性能追踪的源文件顶部包含头文件:
#include "TracyClient.hpp"
3. 启用基本帧标记与区域追踪
最常用的功能是标记代码段和帧边界。
标记函数或代码块:
使用 ZoneScoped 自动标记当前作用域:
void update() {
ZoneScoped; // 自动记录该函数的执行时间
// 模拟工作
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
也可以用自定义名字:
ZoneNamed(update_zone, true); // 一些操作 update_zone.End();
标记帧开始:
如果你有主循环(如游戏帧),可以用 FrameMark 标记每一帧的起点:
while (running) {
FrameMark; // 标记新帧开始
update();
render();
}
在 Tracy GUI 中就能看到清晰的帧时间分布。
4. 编译选项与连接设置
为了获得最佳效果,建议开启以下编译选项:
- 定义
TRACY_ENABLE宏以启用 Tracy 功能(发布版本也可开启,开销很小) - 使用调试信息(
-g)以便显示准确的源码位置 - 避免完全内联关键函数,否则 Zone 可能失效
示例编译命令:
g++ -std=c++17 -DTRACY_ENABLE -g main.cpp TracyClient.cpp -lpthread -ldl -o myapp
5. 启动分析:连接客户端与服务器
运行你的程序后,启动之前编译的 tracy-release 可执行文件。
默认情况下,Tracy 客户端会尝试连接本地 8086 端口。只要服务器已启动,连接将自动建立。
你也可以指定 IP 地址进行远程分析:
tracy-release --listen 192.168.1.100
在代码中手动指定地址(高级用法):
tracy::SetNetworkAddress("192.168.1.100");
6. 查看分析结果
连接成功后,Tracy GUI 会实时显示:
你可以点击任意 Zone 查看耗时、调用次数、平均时间等信息,帮助定位性能瓶颈。
基本上就这些。Tracy 上手快,侵入性低,且不影响程序性能,是 C++ 开发者进行实时性能分析的优秀选择。不复杂但容易忽略。









