【问题标题】:How to install gprof on OS X如何在 OS X 上安装 gprof
【发布时间】:2023-03-08 15:02:01
【问题描述】:

我正在尝试使用 gprof 来分析我编写的 C++ 应用程序,但我终其一生都无法弄清楚如何下载和安装它。我搜索了所有我能想到的东西,甚至找不到下载链接。有人请帮忙!

【问题讨论】:

    标签: c++ installation profiling gprof


    【解决方案1】:

    我没有找到适用于 gprofgcov 的 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 行来实现。

    【讨论】:

    • 我还必须“brew install gv”
    • @Chris 谢谢你的来信。更新为包含 gv
    • 现在可以简单地做brew install gperftools
    • 这些步骤对我不起作用,请参阅github.com/gperftools/gperftools/issues/1292pprof 失败:错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool-classic:无法打开文件:/usr/lib/liboah.dylib(没有这样的文件或目录)
    【解决方案2】:

    由于 gprof 目前无法在 OS X 上运行,请使用 Google Performance Tools,现在称为 gperftools

    如果您安装了 gcc,gcov 也可以“开箱即用”。

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

    【讨论】:

    • cohadar,您是否检查过 google perf 工具(pprof + libprofiler)是否可以在 OSX 上运行? gcov 不是分析工具,它是覆盖工具...
    • 如果your_program.c 存在于运行gcov 的不同文件夹中,它将不起作用。您必须将your_program.gcno 传递给gcov 才能工作。
    【解决方案3】:

    gprof 似乎有两个组件。一个是 GCC 编译器本身的一部分,使用 -pg 参数调用。另一个是 gprof 命令,apparently 是 GNU binutils 的一部分。我会留给你弄清楚如何在 OSX 上安装 GCC 和 binutils...

    【讨论】:

    • gprof 似乎不理解 Mach-O 可执行文件,因此不能用于分析 OS X 程序。
    • @Mohan 这样做:mv $(type gcc) $(type gcc)-apple && brew install gcc && brew install binutils.
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2010-11-15
    • 2014-11-29
    • 2011-03-20
    • 2011-04-10
    • 2013-06-30
    • 2012-07-27
    相关资源
    最近更新 更多