【发布时间】:2023-03-08 15:02:01
【问题描述】:
我正在尝试使用 gprof 来分析我编写的 C++ 应用程序,但我终其一生都无法弄清楚如何下载和安装它。我搜索了所有我能想到的东西,甚至找不到下载链接。有人请帮忙!
【问题讨论】:
标签: c++ installation profiling gprof
我正在尝试使用 gprof 来分析我编写的 C++ 应用程序,但我终其一生都无法弄清楚如何下载和安装它。我搜索了所有我能想到的东西,甚至找不到下载链接。有人请帮忙!
【问题讨论】:
标签: c++ installation profiling gprof
我没有找到适用于 gprof 和 gcov 的 MacOS 解决方案对我不起作用,但 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
您可以找到更多gperftools here 的选项。最后,在 PDF 查看器(例如 Preview)中打开 program_name.pdf 文件,享受精美的 graphviz 输出。
显然,使用 Bash 脚本可以非常轻松地自动在程序上运行分析器,因为只有一个 program_name 参数并且共享库位置是恒定的。下面是一个名为 profile.sh 的示例脚本,它正是这样做的,但包括编译并添加了第二个变量,以便您可以编译具有不同名称的 .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 行来实现。
【讨论】:
gv。
brew install gperftools
pprof 失败:错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool-classic:无法打开文件:/usr/lib/liboah.dylib(没有这样的文件或目录)
由于 gprof 目前无法在 OS X 上运行,请使用 Google Performance Tools,现在称为 gperftools。
如果您安装了 gcc,gcov 也可以“开箱即用”。
$ gcc -fprofile-arcs -ftest-coverage your_program.c
$ a.out
$ gcov your_program.c
【讨论】:
your_program.c 存在于运行gcov 的不同文件夹中,它将不起作用。您必须将your_program.gcno 传递给gcov 才能工作。
gprof 似乎有两个组件。一个是 GCC 编译器本身的一部分,使用 -pg 参数调用。另一个是 gprof 命令,apparently 是 GNU binutils 的一部分。我会留给你弄清楚如何在 OSX 上安装 GCC 和 binutils...
【讨论】:
mv $(type gcc) $(type gcc)-apple && brew install gcc && brew install binutils.