在 mac os x 上分析 c++

问题描述 投票:0回答:4

我正在尝试在我的 mac (os x Lion) 上分析一些 C++ 代码,但我找不到任何有用的东西。我正在寻找一个分析器,它可以告诉我哪些函数占用了我的 cpu 时间(类似于 matlab 分析器)。

这是我尝试过的

  • gprof。这是我在 Linux 机器上使用的,但它只是在我的 mac 上给了我空输出(显然是一个已知问题)
  • 仪器。我一生都无法弄清楚如何在编译的二进制文件中分析任何内容。我也找不到任何有用的教程。
  • (其他搜索显示 Shark,它不再可用,Valgrind 是为了记忆)。
macos profiling
4个回答
130
投票

仪器是使用的工具。仪器的完整解释超出了本答案的范围,但这里有一个快速入门指南:

  1. 打开仪器。1
  2. 选择“时间分析器”模板。
  3. 在“目标”下拉菜单中选择您的应用程序。2
  4. 点击红色圆圈(“记录”)按钮开始运行您的应用程序。
  5. 如果适用,请在应用程序中执行一些需要分析的操作。
  6. 再次点击录音按钮即可停止录音。
  7. 使用 Instruments 中的工具来分析您的结果。

在可用的工具中,最常用的工具是:

  • 使用展开箭头展开调用树
  • 单击函数名称上的圆圈箭头将其聚焦
  • 双击函数可查看关联源
  • 左侧的“反转调用树”复选框

您还可以在命令行上启动

instruments
的调用:

instruments -l 30000 -t Time\ Profiler -p 5773

参见说明


1 打开 Instruments 的一种简单方法是使用 Spotlight:只需单击任务栏右上角(时钟旁边)的放大镜,然后输入“Instruments”。

2 单击“选择目标...”并导航到可执行文件的路径。


9
投票

仪器是使用的工具。 要解决空白痕迹的问题,请确保从 XCode 中打开 Instruments:

Xcode > Open Developer Tool > Instruments

如果您从上次更新 XCode 之前固定到扩展坞的旧仪器图标打开仪器,它将给您留下空白痕迹。


9
投票

仪器确实是正确的答案,但如果您不知道如何使用它,那么另一个选择是内置活动监视器应用程序中的分析器。在活动监视器中,您可以获得有关任何正在运行的进程的信息,并且有一个按钮可以对其执行进行一段时间的采样。您必须启动程序,切换到活动监视器,找到进程,然后对其进行采样。

此外,您只需在调试器中运行程序并手动暂停六次左右并记下当时的调用堆栈即可进行“穷人的分析”。它非常简单,但作为大部分程序的第一步,它的工作效果出人意料地好。

还有一个命令行

sample
程序,可以像其他程序一样对调用堆栈进行采样。


0
投票

2024年,

“instruments”现已弃用,取而代之的是“xcrun xctrace”。

因此,要在 MacOS 上分析您的 C++ 可执行文件,如下所示:

  1. 确保打开调试符号,以获取调用图中的更多信息。 编译源代码时,为gcc/clang添加选项
    -g
  2. 生成二进制可执行文件后,运行:
xctrace record --output . --template "Time Profiler" --time-limit 5s --launch -- <your_excutable_file> <excutable_args>

上一个命令将在当前工作目录中生成一个

.trace
文件, 打开文件管理器并双击查看调用图。


注意:如需了解更多信息,请在终端中输入

xctrace help record

© www.soinside.com 2019 - 2024. All rights reserved.