首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MacOSX上Google Perftools CPU profiler中的行号

MacOSX上Google Perftools CPU profiler中的行号
EN

Stack Overflow用户
提问于 2012-05-12 16:52:30
回答 2查看 3.1K关注 0票数 14

我正在尝试在MacOSX上分析一些C++程序。所以我构建了google-perftools,编写了一个程序,使用MacPorts g++ 4.7编译,带有-g编译器标志,并链接到libprofiler。然后我运行:

代码语言:javascript
复制
CPUPROFILE=cpu.profile ./a.out

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

代码语言:javascript
复制
[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
      11   3.9%  51.8%       11   3.9% 0x000000010d721a4e
       9   3.2%  55.0%        9   3.2% 0x000000010d721e13
       8   2.8%  57.8%        8   2.8% 0x000000010d721a64
       7   2.5%  60.3%        7   2.5% 0x000000010d7222f0
       6   2.1%  62.4%        6   2.1% 0x000000010d721a4c
       6   2.1%  64.5%        6   2.1% 0x000000010d721b1f
       6   2.1%  66.7%        6   2.1% 0x000000010d721e0c
       5   1.8%  68.4%        5   1.8% 0x000000010d721fba
    ......

看起来perftools不会将地址转换为函数名。

有人知道我在这里错过了什么吗?我应该怎么做才能让分析器生成正确的结果。

编辑:更多信息:这不是pprof或google-perftools的问题,而是更像gcc或macosx的问题,因为Instrument.app也显示地址而不是行号。我不熟悉调试符号如何在Mac OS X下工作,所以我宁愿认为它是我在这里缺少的东西,而不是在gcc或Mac OS X中的错误。我想知道是否有人可以提供一些提示如何调试信息在Mac OS X上工作。

EN

回答 2

Stack Overflow用户

发布于 2013-08-13 18:13:10

这似乎与OS X 10.5中引入的地址空间布局随机化(ASLR)有关

我已经在gperftools问题跟踪器上提交了issue #562。您可以通过传递-Wl,-no_pie来禁用ASLR。

另外,如果你不一定要使用gperftoolsInstruments (Xcode自带)值得一试。

票数 9
EN

Stack Overflow用户

发布于 2012-05-21 01:48:37

我相信在这个平台中,调试符号保留在.o文件中,而不是移动到可执行文件中。要在gdb或分析器中获取符号,您需要保存.o文件。这可能意味着您需要分两步编译您的应用程序(编译,然后链接)以保留.o文件。

有关更多信息,请参见this question

在查看pprof Perl源代码时,符号名称是通过使用nmc++filt获得的,因此您可以尝试独立运行它们,并找出它们不能工作的原因。从pprof源代码看,它似乎尝试了一堆不同的命令行参数来涵盖多个版本的nm。这是对这些方法的总结

nm -D -n -f object-file 2>/dev/nul | cpp+filt

我放在括号中的部分是脚本在运行时确定您的平台和版本的nm和c++filt是否需要的那些部分。尝试上面的所有组合,看看哪种方法有效。然后看看pprof脚本做了什么,可能是通过向它添加一些printfs。

祝好运。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10562280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档