最常见的是C++性能分析工具:perf、 gprof、 Valgrind,gperftools. Heaptrack. AddressSanitizer。 也有提供 GUI 的工具:Visual Studio Profiler (Windows)、JetBrains CLion(集成 Profiler)、VTune Profiler (Intel). Hotspot (Linux GUI)。 (1) Perf perf是 Linux 内核自带的性能分析工具,通过 定期中断 CPU(采样),记录当前 CPU 正在 执行哪个函数。最大优点是开销极低,可以在 生产环境用,release版本也能分析。 要想可视化,性能大神 Brendan Gregg 发明 的火焰图可以把 perf 采集到的堆栈数据通过 SVG图片展示出来。

(2)Hotspot

不想手动生成火焰图 SVG,想要 JProfiler 那种可以交互的界面,可以用 Hotspot 。算是perf 的一个图形化前端。可以点击任意一个函数块,放大查看细节。

(3)Valgrind 家族

Valgrind 是 Linux 最老牌、最强大的内存调试和性能分析工具集。Valgrind 不用重新编译、检查维度极细,还是 C++ 内存分析非常有用的工具。

Valgrind其实指的是默认的工具 Memcheck,但 Valgrind 本质是一个动态二进制插桩框架,它包含一整套工具:Memcheck (默认,检查内存泄漏)、Callgrind(分析 CPU 性能,记录函数调用关系和调用次数)、Massif(堆栈分析器)、Helgrind/DRD(线程错误检测)。

(4)AddressSanitizer (ASan)

显示组件中的「Horizontal Line」和「Vertical Line」本质上是「QFrame」类。只需将 I frameShape」属性设置为「HLine」或 「VLine」,并将「frameShadow」属性设置 为「Sunken」,即可得到水平和竖直分割线 其他的详情见图片和文章。

Google 出品的 AddressSanitizer (ASan) 就非常快,运行速度只比正常程序慢 2 倍左右。程序出现内存错误,ASan 会立即中止程序,打印非常详细的彩色堆栈信息。

(5)Heaptrack

Heaptrack不做内存检测/分析,但能找到哪个对象的内存占用居高不下。
Heaptrack 是体验最接近 JProfiler 的图形化工具。如果机器不能用 GUI,或者要非常低开销的生产环境监控,可以去试试 Google 的gperftools。

【瓜分奖池】C++的性能分析工具有很多,这5个一定要 会! 第5张插图
【瓜分奖池】C++的性能分析工具有很多,这5个一定要 会! 第6张插图
【瓜分奖池】C++的性能分析工具有很多,这5个一定要 会! 第7张插图
【瓜分奖池】C++的性能分析工具有很多,这5个一定要 会! 第8张插图