在 Mac OS X 上使用 gperftools 的问题

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

我发现了关于这个话题的几个相互矛盾的答案。 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 对话的结果是这个脚本。我试着把它清理一下。它可能还包含很多不必要的选项。

c++ macos profiling profile gperftools
3个回答
1
投票

博客文章 https://dudefrommangalore.wordpress.com/2012/02/09/profiling-c-code-using-google-performance-tools/ dudefrommangalore 2012 年的“使用 Google 性能工具分析 C++ 代码”错过了必不可少的一步。

您应该将您的程序(您想要对其进行分析)与 gperftools 库的 cpu profiler 库链接

查看官方手册:http://goog-perftools.sourceforge.net/doc/cpu_profiler.html,“链接到库”部分

-lprofiler
添加到可执行文件的链接时间步骤。 (也可能使用
LD_PRELOAD
在运行时添加探查器,但这不一定是推荐的。)

第二步是收集配置文件,在启用配置文件的情况下运行代码。在linux世界中,这是通过在运行之前设置控制环境变量

CPUPROFILE
来完成的:

CPUPROFILE=name_of_profile ./program_to_be_profiled

第三步是使用

pprof
google-pprof
ubuntu世界)。检查是否生成了非空的
name_of_profile
配置文件;如果没有这样的文件,pprof 将尝试进行远程配置文件获取(您会看到此类尝试的输出)。

pprof ./program_to_be_profiled name_of_profile

1
投票

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

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

$ CPUPROFILE=cpu.profile my_program

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

程序退出时会创建这个cpu.profile文件。然后您可以使用 pprof(最好来自 github.com/google/pprof)对其进行可视化/分析。


0
投票

当我在Mac=Os下编译程序时,使用-lprofiler也失败了。然后我改成-Lprofiler,就可以了。 但我仍然无法通过使用获取 cpu.profile CPUPROFILE=cpu.profile my_program

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