在 Mac OS X 上使用 gperftools 的问题
Problems with using gperftools on Mac OS X
关于这个主题,我发现了几个相互矛盾的答案。 This blog post requires libuwind, but that doesn't work on Mac OS X. I included #include <google/profiler.h>
in my code, however my compiler (g++) could not find the library. I installed gperftools
via homebrew. In addition, I found this Whosebug 问题显示:
Then I ran pprof to generate the output:
[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
为什么它会尝试访问我机器上的 Internet 站点和 his/hers 上的本地文件?
尝试 link 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。我试着清理了一下。它也可能包含很多不必要的选项。
首先你需要运行你的程序启用分析。
这通常首先将您的程序与 libprofiler 链接,然后 运行将其与 CPUPROFILE=cpu.profile 连接。
即
$CPUPROFILE=cpu.profilemy_program
我认为后面的步骤是您所缺少的。
程序将在退出时创建此 cpu.profile 文件。然后你可以使用 pprof(最好从 github.com/google/pprof)到 visualize/analyze.
dudefrommangalore 的博客 post https://dudefrommangalore.wordpress.com/2012/02/09/profiling-c-code-using-google-performance-tools/ "Profiling C++ code using Google Performance Tools" 2012 错过了关键步骤。
您应该 link 您的程序(您希望对其进行分析)使用 gperftools 库的 cpu 分析器库。
查看官方手册:http://goog-perftools.sourceforge.net/doc/cpu_profiler.html,部分"Linking in the Library"
add -lprofiler
to the link-time step for your executable. (It's also probably possible to add in the profiler at run-time using LD_PRELOAD
, but this isn't necessarily recommended.)
第二步是收集配置文件,运行启用配置文件的代码。在 linux 世界中,它是通过在 运行ning:
之前设置控制环境变量 CPUPROFILE
来完成的
CPUPROFILE=name_of_profile ./program_to_be_profiled
第三步是使用pprof
(ubuntu world中的google-pprof
)。检查是否生成了非空name_of_profile
配置文件;如果没有这样的文件,pprof 将尝试进行远程配置文件获取(您会看到此类尝试的输出)。
pprof ./program_to_be_profiled name_of_profile
关于这个主题,我发现了几个相互矛盾的答案。 This blog post requires libuwind, but that doesn't work on Mac OS X. I included #include <google/profiler.h>
in my code, however my compiler (g++) could not find the library. I installed gperftools
via homebrew. In addition, I found this Whosebug 问题显示:
Then I ran pprof to generate the output:
[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
为什么它会尝试访问我机器上的 Internet 站点和 his/hers 上的本地文件?
尝试 link 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。我试着清理了一下。它也可能包含很多不必要的选项。
首先你需要运行你的程序启用分析。
这通常首先将您的程序与 libprofiler 链接,然后 运行将其与 CPUPROFILE=cpu.profile 连接。
即
$CPUPROFILE=cpu.profilemy_program
我认为后面的步骤是您所缺少的。
程序将在退出时创建此 cpu.profile 文件。然后你可以使用 pprof(最好从 github.com/google/pprof)到 visualize/analyze.
dudefrommangalore 的博客 post https://dudefrommangalore.wordpress.com/2012/02/09/profiling-c-code-using-google-performance-tools/ "Profiling C++ code using Google Performance Tools" 2012 错过了关键步骤。
您应该 link 您的程序(您希望对其进行分析)使用 gperftools 库的 cpu 分析器库。
查看官方手册:http://goog-perftools.sourceforge.net/doc/cpu_profiler.html,部分"Linking in the Library"
add
-lprofiler
to the link-time step for your executable. (It's also probably possible to add in the profiler at run-time usingLD_PRELOAD
, but this isn't necessarily recommended.)
第二步是收集配置文件,运行启用配置文件的代码。在 linux 世界中,它是通过在 运行ning:
之前设置控制环境变量CPUPROFILE
来完成的
CPUPROFILE=name_of_profile ./program_to_be_profiled
第三步是使用pprof
(ubuntu world中的google-pprof
)。检查是否生成了非空name_of_profile
配置文件;如果没有这样的文件,pprof 将尝试进行远程配置文件获取(您会看到此类尝试的输出)。
pprof ./program_to_be_profiled name_of_profile