溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android NDK使用addr2line符號(hào)化得到錯(cuò)誤函數(shù)名的問題

發(fā)布時(shí)間:2020-07-06 03:39:00 來源:網(wǎng)絡(luò) 閱讀:7729 作者:jazka 欄目:移動(dòng)開發(fā)

       一般Android NDK出現(xiàn)崩潰之后,我們會(huì)使用addr2line工具來進(jìn)行符號(hào)化。如果你使用了C++11的一些特性,那么要注意了,有可能你將得到錯(cuò)誤的函數(shù)名。我們公司是提供崩潰分析相關(guān)的服務(wù)的,采集用戶的崩潰日志,上傳到后臺(tái)服務(wù)器后,會(huì)進(jìn)行符號(hào)化操作。之前一直好好的,最近有用戶說符號(hào)化后的結(jié)果不正確,函數(shù)名和文件及行號(hào)不一致。

        這個(gè)問題其實(shí)蠻奇怪的,要說addr2line可是操作系統(tǒng)級(jí)別的工具,無數(shù)人使用,不可能出這種低級(jí)錯(cuò)誤啊。不過為了進(jìn)一步驗(yàn)證,準(zhǔn)備在自己的PC上用addr2line重現(xiàn)一下,結(jié)果發(fā)現(xiàn),沒有問題,符號(hào)化是正確的。又到服務(wù)器上測(cè)試,發(fā)現(xiàn)仍然不對(duì)。查看addr2line的版本,發(fā)現(xiàn)是不同的,如下所示。

[root@tdata ~]# addr2line --version
GNU addr2line version 2.20.51.0.2-5.42.el6 20100205
Copyright 2009 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) any later version.
This program has absolutely no warranty.
xxx@xxx-desktop:~/Templates/Tyrion-debug-tusuo$ addr2line --version
GNU addr2line (GNU Binutils for Ubuntu) 2.24
Copyright 2013 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) any later version.
This program has absolutely no warranty.

看來應(yīng)該是這個(gè)問題了,同時(shí)操作系統(tǒng)也不同,自己的是Ubuntu,服務(wù)器是CentOS。大家都知道,CentOS上的軟件一般版本都比較老,而且repo源沒有最新版本的更新,需要自己添加源。


        首先想是不是將自己PC上的addr2line放到服務(wù)器上,就可以解決問題了,因?yàn)檫@個(gè)文件是C語言寫的二進(jìn)制文件。結(jié)果出現(xiàn)了下面的錯(cuò)誤:

[root@tdata ~]# ./addr2line -f -e libgame.so 0x33e17b
./addr2line: error while loading shared libraries: libbfd-2.24-system.so: cannot open shared object file: No such file or directory

查閱了addr2line的源碼可以發(fā)現(xiàn),它會(huì)引用#include "bfd.h",會(huì)依賴libbfdxxx.so。


        接著只能從官方下載新版本,再重新編譯,進(jìn)行addr2line的版本升級(jí)。官網(wǎng)地址為

ftp://sourceware.org/pub/binutils/snapshots/binutils-2.24.90.tar.bz2,你也可以從git上同步代碼下來重新編譯。


        注意最好到目標(biāo)機(jī)器上進(jìn)行編譯。在升級(jí)了addr2line之后,一切正常了。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI