[英]Perf does not display call graph properly on Android
我正在嘗試使用perf
來分析我的Android應用程序。
在fplutil項目的幫助下,我設法在Android設備上安裝perf,運行perf record
,然后在主機上執行perf report
。
通常,當我運行性能perf report -g
我希望看到類似於此的調用圖:
47.91% a.out a.out [.] f5()
|
--- f5()
|
|--53.82%-- f4()
| |
| |--56.16%-- f3()
| | |
| | |--49.14%-- f2()
| | | |
| | | |--52.92%-- f1()
| | | | a()
| | | | main
| | | | __libc_start_main
| | | |
| | | --47.08%-- a()
| | | main
| | | __libc_start_main
但是,當我對在Android設備上收集的數據執行性能perf report
,我沒有看到正確的調用圖,例如堆棧未正確展開:
4.98% app_name my_lib.so [.] void quat_apply<double>(double*, double const*, double const*, int, double)
|
--- 0xbee75fe4
|
--- 0xbee760c4
|
--- 0xbee75c0c
我該怎么辦才能用函數名稱替換這些十六進制地址?
我已經在使用-g
和-fno-omit-frame-pointer
構建代碼了,我還缺少其他東西嗎?
答對了!
-mapcs-frame
生成對於所有功能都符合《 ARM過程調用標准》的堆棧框架,即使對於正確執行代碼嚴格而言並非必須如此。 使用此選項指定-fomit-frame-pointer會導致不為葉函數生成堆棧幀。 缺省值為-mno-apcs-frame。 不建議使用此選項。
盡管option標記為已棄用,但它為我修復了調用圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.