![时根据backtrace定位问题的方法_第1页](http://file4.renrendoc.com/view/7061c32573089e668870db269a1cfbb5/7061c32573089e668870db269a1cfbb51.gif)
![时根据backtrace定位问题的方法_第2页](http://file4.renrendoc.com/view/7061c32573089e668870db269a1cfbb5/7061c32573089e668870db269a1cfbb52.gif)
![时根据backtrace定位问题的方法_第3页](http://file4.renrendoc.com/view/7061c32573089e668870db269a1cfbb5/7061c32573089e668870db269a1cfbb53.gif)
![时根据backtrace定位问题的方法_第4页](http://file4.renrendoc.com/view/7061c32573089e668870db269a1cfbb5/7061c32573089e668870db269a1cfbb54.gif)
![时根据backtrace定位问题的方法_第5页](http://file4.renrendoc.com/view/7061c32573089e668870db269a1cfbb5/7061c32573089e668870db269a1cfbb55.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 页进程异常终止时根据backtrace定位问题的方法项目中经常会遇到进程异常终止的问题,本文介绍的是根据log中打印出来的backtrace定位问题点的方法。1.如何获取debug信息当异常发生时,一般会有两个地方保存backtrace和stack;(1)Logcat一般在mainlog里面,关键字是“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的目标文件这两个工具要结合带symbol的目标文件才能达到定位的目的;symbol文件在编译过程中有,一般在最终
4、版本中的目标文件是不带symbol的。以联芯的ril为例,其最终生成的目标文件是out/target/product/U930HD/system/lib/libreference-ril.so中,而其symbol文件在out/target/product/U930HD/symbols/system/lib/libreference-ril.so我们最终使用的目标文件是后者。(2)必须使用正确的工具版本Android在编译的时候,会指定arm的交叉编译器,我们分析问题模块时,需要使用的工具版本必须和编译过程中指定的arm编译器一致;以联芯为例,编译时使用的gcc版本是prebuildt/linu
5、x-x86/toolchain/arm-linux-androideabi-4.4.x/bin中指定的以arm-linux-androideabi-xxx命名的工具,因此我们使用的分析工具也必须是这个路径下的工具。2.1addr2line该工具可以根据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知道其调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的公共週用,其本身应该没有问题,问题应该在其入参,这必用者;free(p_toFree);reference-ril.c:3808这告诉我们之前的at_response_free的调用者在文件reference-ril.c的requestRadioPower中,在3808行;03806:?endifonOff088isState=R.ADI.?03807:03B0B:atresponsefree(p_response);|03809:RILonRequestComplete(tfRILESUCCESSfNULL,Cl)这里调用的入
9、参p_response不是NULL,但是其内部成员line为NULL,引起了SIGSEGV段错误。通过代码流程的排查,if()/line3451/*tnrnoff*/-else/*tnrnon*/if()/line3625-:atresponsefree(presponse)/debug/line3670else/line3676at_response_free(p_re5ponse);/line3303发现在3670行有了一次free的操作,但是没有将p_response置成NULL,形成了野指针,在3808行的时候,野指针不为NULL,作为有效入参输入,导致了上述的段错误。我们通过addr
10、2line定位到问题出现的点,缩小代码排查范围,达到了快速定位问题的目的。该工具分析过程中,必须结合源码,才能根据代码行分析问题的原因,如果没有源码,就必须依赖下面的工具来分析了。2.2objdump该工具是用来对目标文件实施反汇编的工具,如果是带symbol的目标文件,反汇编后可以看到部分源码,如果是不带symbol的目标文件,就只能看到汇编码。00002af0:2af0:e92d41fUstmdbsp!rr4,r5,r6frlfr8f1匚2af4:4c26ldrpc,#152;(2b9u)2af6:fldOU5D1rstosrQf#12afa:bf38itcc2afc:2500movcc2
11、afe:2a00cmpr2x21300:bf08iteq2b02:045U5D1rreq不带yimbol反汇编話结果带symbol反汇编结果该工具使用及分析过程如下:在debug信息中看到,#00pc0000bb96/system/lib/libreference-ril.so#01pc000049e6/system/lib/libreference-ril.so#02pc000070d0/system/lib/libreference-ril.so#03pc000052a6/system/lib/libril.so1反汇编目标文件arm-linux-androideabi-objdump-d
12、-S-llibreference-ril.solibreference-ril.S这之后生成目标文件的反汇编代码文件libreference-ril.S2査看错误信息(使用带symbol的目标文件汇编码)在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从查看的结果可以发现,问题点的代码行与addr2line定位出来的是一致的;在没有源码的情况下,我们只能分析到这里,知道这里的调用存在问题,可以用以指导有源码的同事做进一步的代码流程分析。3查看错误信息(使用不带symbol的目标文件汇编码)在libreference-ril.S中查看0000bb96和000049e6,对于熟悉汇编码的人可以通过以上定位到问题出现地方,达到相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信阳师范大学《建筑速写》2022-2023学年第一学期期末试卷
- 灵活应变的工作计划设计
- 童话阅读班主任的童话阅读指导计划
- 水泥厂建设招标合同三篇
- 新余学院《软件项目管理》2022-2023学年第一学期期末试卷
- 西南交通大学《数据结构与算法》2023-2024学年第一学期期末试卷
- 西南交通大学《高级语言程序设计》2021-2022学年第一学期期末试卷
- 团总支干部培训
- 开腹卵巢癌手术配合
- 手术室妇科护理查房
- 三年级上册数学第七单元提优夺冠密卷 苏教版 【含答案】
- 众辰变频器说明书3400
- 发电机房巡检记录表
- 小学科学粤教版四年级上册全册知识点总结(2020新版)
- 科学发展观新课件
- 福彩3D历史开奖数据2002-2016(174)全部数据
- 污水处理操作工考试题库与答案(最新版)
- DB65∕T 2794-2007 新疆驴饲养管理规程
- 幼儿绘本故事:长颈鹿要出门
- 检验科生物安全风险评估报告
- 宪法知识讲座讲稿(课堂PPT)
评论
0/150
提交评论