在Mac OS X上使用gperftools的问题

时间:2016-06-07 17:16:27

标签: c++ macos profiling profile gperftools

我在这个主题上找到了几个相互矛盾的答案。 This博客文章需要libuwind,但这不适用于Mac OS X.我在代码中包含了#include <google/profiler.h>,但我的编译器(g ++)找不到库。我通过自制软件安装了gperftools。另外,我发现this stackoverflow问题显示了这个:

  

然后我运行pprof来生成输出:

[hidden ~]$ pprof --text ./a.out cpu.profile 
Using local file ./a.out.
Using local file cpu.profile.
Removing __sigtramp from all stack traces.
Total: 282 samples
     107  37.9%  37.9%      107  37.9% 0x000000010d72229e
      16   5.7%  43.6%       16   5.7% 0x000000010d721a5f
      12   4.3%  47.9%       12   4.3% 0x000000010d721de8
...

运行该命令(没有任何先前步骤)让我知道:

[hidden]$ pprof --text ./a.out cpu.profile 
Using remote profile at ./a.out.
Failed to get the number of symbols from http://cpu.profile/pprof/symbol

为什么它试图访问我的机器上的互联网站点和他/她的本地文​​件?

试图将lib profiler作为干运行与g ++链接得到我:

[hidden]$ g++ -l libprofiler
ld: library not found for -llibprofiler
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我查看了手册页,帮助选项文本,官方在线指南,博客文章以及许多其他来源。

我现在很困惑。有人可以帮我使用gperftools吗?

我与@osgx对话的结果是this script。我试着把它清理一下。它也可能包含很多不必要的选项。

2 个答案:

答案 0 :(得分:1)

首先,您需要在启用了性能分析的情况下运行程序。

这通常首先将程序与libprofiler链接,然后使用CPUPROFILE = cpu.profile运行它。

$ CPUPROFILE = cpu.profile my_program

我认为后面的步骤是你一直缺少的。

程序将在退出时创建此cpu.profile文件。然后你可以使用pprof(最好是从github.com/google/pprof)来进行可视化/分析。

答案 1 :(得分:1)

博文https://dudefrommangalore.wordpress.com/2012/02/09/profiling-c-code-using-google-performance-tools/&#34;使用Google Performance Tools&#34;分析C ++代码2012年由dudefrommangalore错过了必不可少的一步。

你应该链接你的程序(你想要被分析)与gperftools库的cpu profiler库。

查看官方手册:http://goog-perftools.sourceforge.net/doc/cpu_profiler.html,部分&#34;链接到图书馆&#34;

  

-lprofiler添加到可执行文件的链接时步骤。 (也可能使用LD_PRELOAD在运行时添加到分析器中,但不一定要推荐。)

第二步是收集配置文件,运行启用了配置文件的代码。在linux世界中,它是通过在运行之前设置控制环境变量CPUPROFILE来完成的:

CPUPROFILE=name_of_profile ./program_to_be_profiled

第三步是在ubuntu world中使用pprofgoogle-pprof)。检查是否生成了空name_of_profile个配置文件;它没有这样的文件,pprof将尝试进行远程配置文件获取(你会看到这样的输出)。

pprof ./program_to_be_profiled name_of_profile