時根據(jù)backtrace定位問題的方法_第1頁
時根據(jù)backtrace定位問題的方法_第2頁
時根據(jù)backtrace定位問題的方法_第3頁
時根據(jù)backtrace定位問題的方法_第4頁
時根據(jù)backtrace定位問題的方法_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第 頁進程異常終止時根據(jù)backtrace定位問題的方法項目中經(jīng)常會遇到進程異常終止的問題,本文介紹的是根據(jù)log中打印出來的backtrace定位問題點的方法。1.如何獲取debug信息當(dāng)異常發(fā)生時,一般會有兩個地方保存backtrace和stack;(1)Logcat一般在mainlog里面,關(guān)鍵字是“DEBUG”;文件中一般在/data/tombstones,以tombstone_XX命名的文件;一般是有如下的格式:3-j.lld.fingerprint:1ETE/U930HD/U930HD:4.0.3/IML74K/eng.root.20121116.042147:eng/releas

2、e-keys1pid:3E2rtid:3BE/syatera/Jain/rild丈丈丈signal11(SIGSEGV,code1(SEGV_MAPERRrfaultaddr00000007rOOO0Oa628rllO0ff6c8r2aa86cll5r3aa8cll500000003r50000a628r64018f343r7ffffffffrSOigozac.rS013ai6cl3100189alerpOisrisip00000000splOOffhOSIr4017i9ebpc40182b96cpsr20000030#00PC0000fcb96/syst已工已:E已工已nu已一工j.1.so

3、PC000049已石/syst已工已:E已工已nu已一工j.1.soPC000070d0/syst已工已:E已工已nc已一工)丄.bo#03PC000052a6/syst已m/丄.so#04PC00005f30/syst已m/丄.so#05PC000064f2/syst已m/丄.soPC00012c0c/syst已.bo#07PC00012760/syst已.bo2工具及使用舉例主要用于定位的工具有:addr2line和objdump;使用中有兩個注意點:(1)必須使用帶symbol的目標(biāo)文件這兩個工具要結(jié)合帶symbol的目標(biāo)文件才能達到定位的目的;symbol文件在編譯過程中有,一般在最終

4、版本中的目標(biāo)文件是不帶symbol的。以聯(lián)芯的ril為例,其最終生成的目標(biāo)文件是out/target/product/U930HD/system/lib/libreference-ril.so中,而其symbol文件在out/target/product/U930HD/symbols/system/lib/libreference-ril.so我們最終使用的目標(biāo)文件是后者。(2)必須使用正確的工具版本Android在編譯的時候,會指定arm的交叉編譯器,我們分析問題模塊時,需要使用的工具版本必須和編譯過程中指定的arm編譯器一致;以聯(lián)芯為例,編譯時使用的gcc版本是prebuildt/linu

5、x-x86/toolchain/arm-linux-androideabi-4.4.x/bin中指定的以arm-linux-androideabi-xxx命名的工具,因此我們使用的分析工具也必須是這個路徑下的工具。2.1addr2line該工具可以根據(jù)debug信息中提供的address(如#00PCxxxxxxxx),直接定位到代碼行。使用及分析過程如下:在debug信息中看到,#00pc0000bb96/system/lib/libreference-ril.so#01pc000049e6/system/lib/libreference-ril.so#02pc000070d0/system

6、/lib/libreference-ril.so#03pc000052a6/system/lib/libril.so1.査看第一條出錯信息:arm-linux-androideabi-addr21ine-f-elibreference-ril.so0000bb96at_response_freeatchannel_mch.c:1071這告訴我們出錯的代碼在文件atchannel_mch.c的at_response_free中,在1071行;voidat_eSpnSe_fee(ATResponse大presponse)010570105801059010600106101062010630106

7、4010650106601067010680106901070但是at_respO知道其調(diào)01074:2.查看第二條出錯信息e(p_response-finalResponse);arm-linux-androidea!bi-addr2iinefs-piJbrfTbnce-ril.so000049e6requestRadiOPower吐賀00門託亓從?ATLineline;if(presponse=NULL)r&turii;p_Line=presponse-p_intEi/mEdi日tes;while(p_line1=NULL)ATLine*p七oFree;p_toFree=p_line;p_

8、line=p_line-p_next;Inse_free是ril的公共週用,其本身應(yīng)該沒有問題,問題應(yīng)該在其入?yún)?,這必用者;free(p_toFree);reference-ril.c:3808這告訴我們之前的at_response_free的調(diào)用者在文件reference-ril.c的requestRadioPower中,在3808行;03806:?endifonOff088isState=R.ADI.?03807:03B0B:atresponsefree(p_response);|03809:RILonRequestComplete(tfRILESUCCESSfNULL,Cl)這里調(diào)用的入

9、參p_response不是NULL,但是其內(nèi)部成員line為NULL,引起了SIGSEGV段錯誤。通過代碼流程的排查,if()/line3451/*tnrnoff*/-else/*tnrnon*/if()/line3625-:atresponsefree(presponse)/debug/line3670else/line3676at_response_free(p_re5ponse);/line3303發(fā)現(xiàn)在3670行有了一次free的操作,但是沒有將p_response置成NULL,形成了野指針,在3808行的時候,野指針不為NULL,作為有效入?yún)⑤斎?,?dǎo)致了上述的段錯誤。我們通過addr

10、2line定位到問題出現(xiàn)的點,縮小代碼排查范圍,達到了快速定位問題的目的。該工具分析過程中,必須結(jié)合源碼,才能根據(jù)代碼行分析問題的原因,如果沒有源碼,就必須依賴下面的工具來分析了。2.2objdump該工具是用來對目標(biāo)文件實施反匯編的工具,如果是帶symbol的目標(biāo)文件,反匯編后可以看到部分源碼,如果是不帶symbol的目標(biāo)文件,就只能看到匯編碼。00002af0:2af0:e92d41fUstmdbsp!rr4,r5,r6frlfr8f1匚2af4:4c26ldrpc,#152;(2b9u)2af6:fldOU5D1rstosrQf#12afa:bf38itcc2afc:2500movcc2

11、afe:2a00cmpr2x21300:bf08iteq2b02:045U5D1rreq不帶yimbol反匯編話結(jié)果帶symbol反匯編結(jié)果該工具使用及分析過程如下:在debug信息中看到,#00pc0000bb96/system/lib/libreference-ril.so#01pc000049e6/system/lib/libreference-ril.so#02pc000070d0/system/lib/libreference-ril.so#03pc000052a6/system/lib/libril.so1反匯編目標(biāo)文件arm-linux-androideabi-objdump-d

12、-S-llibreference-ril.solibreference-ril.S這之后生成目標(biāo)文件的反匯編代碼文件libreference-ril.S2査看錯誤信息(使用帶symbol的目標(biāo)文件匯編碼)在libreference-ril.S中查看0000bb96和000049e6,/home/ganhui1iang/LC/lc1810/develop/ap/base/android-403_r1/leadcore/hardware/ril/leadcore-ri1/atchannel_mchc:1071ATLinep_toFree;p_toFree=p_line;p_liiie=p_line

13、-p_next;freei:ptoFree-line);bb96:6860ldrrO,r4.#理|/home/ganhui1iang/LC/lc1810/develop/ap/toase/android-403_r1/leadcore/hardware/ril/leadcore-ril/reference-rilc:3808LOGD(rr=request-RadioPowertheg_dataca11s%disinitialized,rfi:i;:!/古addedtoyhuaiigyong2012-09-27end古/:!曰匸irmwgefree(presponse);49e4:980alclrrO,sp,#40;0 x2849e6:f007f8dlblJakiSc從查看的結(jié)果可以發(fā)現(xiàn),問題點的代碼行與addr2line定位出來的是一致的;在沒有源碼的情況下,我們只能分析到這里,知道這里的調(diào)用存在問題,可以用以指導(dǎo)有源碼的同事做進一步的代碼流程分析。3查看錯誤信息(使用不帶symbol的目標(biāo)文件匯編碼)在libreference-ril.S中查看0000bb96和000049e6,對于熟悉匯編碼的人可以通過以上定位到問題出現(xiàn)地方,達到相

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論