如何在OS X上安装gprof?

16

我正在尝试使用gprof来对我编写的C++应用程序进行性能分析,但我无法弄清楚如何下载和安装它。我已经谷歌了所有我能想到的关键词,甚至没有找到一个下载链接。请有人帮忙!

我试图使用 gprof 对我编写的 C++ 应用程序进行性能分析,但是我不知道该如何下载和安装它。我已经搜索了所有可能的关键词,但仍然找不到下载链接。请有人帮帮我!
3个回答

9

看起来gprof有两个组成部分。一个是GCC编译器本身的一部分,通过使用 -pg 参数调用。另一个是gprof命令,显然是GNU binutils的一部分。我会让你自己想办法在OSX上安装GCC和binutils...


4
似乎 gprof 不支持 Mach-O 可执行文件,因此无法用于分析 OS X 程序。 - Desty
3
@Mohan 只需要执行这个命令:mv $(type gcc) $(type gcc)-apple && brew install gcc && brew install binutils - thepiercingarrow

8

我没有找到适用于MacOS的gprof解决方案,而gcov对我也不起作用,但是gperftools(Google性能工具)可以使用。以下是在MacOS上安装它们的方法:

brew install google-perftools graphviz ghostscript gv
brew link --overwrite ghostscript

接下来,在程序上运行分析器:

CPUPROFILE=program_name.prof DYLD_INSERT_LIBRARIES=/usr/local/Cellar/gperftools/2.6.3/lib/libprofiler.dylib ./program_name
pprof --pdf program_name program_name.prof > program_name.pdf

你可以在这里找到更多选项。最后,打开类似于Preview的PDF查看器,以便享受漂亮的输出。

显然,使用Bash脚本可以非常容易地自动运行程序上的分析器,因为只有一个参数和共享库位置是固定的。以下是一个名为的示例脚本,它正好可以做到这一点,但包括编译并添加了第二个变量,以便您可以使用不同名称编译<.cpp>文件:

#!/bin/bash
g++-7 -fopenmp -O3 -o $1 $2.cpp
CPUPROFILE=$1.prof DYLD_INSERT_LIBRARIES=/usr/local/Cellar/gperftools/2.6.3/lib/libprofiler.dylib ./$1
pprof --pdf $1 $1.prof > $1.pdf
echo "Profiling results: $1.pdf"

接下来,修改权限,使其可以在任何文件夹中运行:

chmod +x profile.sh

该脚本可以从命令行调用,自动化整个过程,具体如下:
./profile.sh program_name cpp_name

你可能希望将编译和剖析步骤分开,只需在shell脚本中删除g++-7行即可轻松实现。

我必须执行 'brew install gv'。 - Chris
@Chris 谢谢您的留言。已更新以包括 gv - Adam Erickson
2
现在可以简单地执行 brew install gperftools - Matt Eding
2
这些步骤对我无效,请参见 https://github.com/gperftools/gperftools/issues/1292;`pprof` 失败,显示以下错误: error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool-classic: can't open file: /usr/lib/liboah.dylib (No such file or directory) - timotheecour

3

由于 gprof 目前不能在 macOS 上使用,因此请使用 Google Performance Tools,现在称为 gperftools

如果已安装 gcc,则 gcov 可以“开箱即用”。

$ gcc -fprofile-arcs -ftest-coverage your_program.c
$ a.out
$ gcov your_program.c

1
cohadar,你有检查过Google Perf Tools(pprof + libprofiler)在OSX上是否可用吗?gcov不是性能分析工具,它是覆盖率工具... - osgx
如果your_program.c存在于运行gcov的不同文件夹中,它将无法工作。您必须将your_program.gcno传递给gcov才能正常工作。 - Hamid Rouhani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接