簡體   English   中英

MacOSX上的Google Perftools CPU Profiler中的行號

[英]Line number in Google Perftools CPU profiler on MacOSX

我試圖在MacOSX上分析一些C ++程序。 所以我構建了google-perftools ,編寫了一個程序,使用MacPorts g ++ 4.7編譯,帶有-g編譯器標志,並鏈接到libprofiler 然后我跑了:

CPUPROFILE=cpu.profile ./a.out

然后我運行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
      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.

這似乎與OS X 10.5中引入的地址空間布局隨機化 (ASLR)有關

我在gperftools問題跟蹤器上提交了問題#562 您可以通過傳遞-Wl,-no_pie來禁用ASLR。

此外,如果您不必使用gperftools ,則Instruments (隨Xcode )值得一試。

我相信在這個平台上,調試符號保留在.o文件中,它們不會移動到可執行文件中。 要在gdb或分析器中獲取符號,您需要保存.o文件。 這可能意味着您需要分兩步編譯應用程序(編譯,然后鏈接)以保留.o文件。

有關其他信息,請參閱此問題

在查看pprof Perl源代碼時,通過使用nmc++filt獲得符號名稱,因此您可以嘗試運行這些符號並找出它們無法工作的原因。 從pprof源看起來,它嘗試了一堆不同的命令行參數來覆蓋幾個版本的nm。 這是方法的總結

nm [-D] -n [-f] [ - demangle] object-file 2> / dev / nul [| CPP + FILT]

我放在括號中的部分是腳本在運行時確定的部分,如果您的平台和nm和c ++ filt版本需要的話。 嘗試上述所有組合,看看有效。 然后看一下pprof腳本的功能,也許可以通過添加一些printfs來實現。

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM