Gentoo 中解決 perf “找不到符號(hào)”的問題

使用 perf 進(jìn)行性能分析時(shí),一個(gè)令人頭疼的問題是,有時(shí)候找不到某些庫(kù)的符號(hào)。例如,當(dāng)我在 Gentoo 下面運(yùn)行 perf script 時(shí),系統(tǒng)報(bào)了下面的錯(cuò)誤:

$ perf script > out.perf
no symbols found in /bin/gzip, maybe install a debug package?
no symbols found in /usr/bin/sandbox, maybe install a debug package?
no symbols found in /usr/x86_64-pc-linux-gnu/gcc-bin/5.4.0/x86_64-pc-linux-gnu-gcc, maybe install a debug package?

這個(gè)時(shí)候,就需要我們安裝相關(guān)庫(kù)的 debug 版本。幸運(yùn)的是,Gentoo 提供了相當(dāng)簡(jiǎn)潔的解決辦法,只需要對(duì) /etc/make.conf 文件稍作修改即可:

  • CFLAGS 變量的值中添加 -ggdb 選項(xiàng);
  • 新加一行:FEATURES="splitdebug"

然后重新安裝 glibc 以及報(bào)錯(cuò)信息中提示的庫(kù):

$ emerge -1 glibc
$ emerge -1 gzip
$ emerge -1 sandbox
$ emerge -1 gcc

之后就可以重新運(yùn)行 perf script 了。

程序的符號(hào)信息被保存在了目錄 /usr/lib/debug 下面,因此不會(huì)影響到程序的運(yùn)行性能(但增加了磁盤占用)。還有另外一種方式是使用 FEATURES="nostrip",這種方式將符號(hào)信息保留在程序的二進(jìn)制執(zhí)行文件中,因而會(huì)影響到程序的運(yùn)行性能。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容