时根据backtrace定位问题的方法.docx_第1页
时根据backtrace定位问题的方法.docx_第2页
时根据backtrace定位问题的方法.docx_第3页
时根据backtrace定位问题的方法.docx_第4页
时根据backtrace定位问题的方法.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

进程异常终止时根据backtrace定位问题的方法项目中经常会遇到进程异常终止的问题,本文介绍的是根据log中打印出来的backtrace定位问题点的方法。1. 如何获取debug信息当异常发生时,一般会有两个地方保存backtrace和stack;(1) Logcat一般在main log里面,关键字是 “DEBUG”;(2) 文件中一般在/data/tombstones,以tombstone_XX命名的文件;一般是有如下的格式:2. 工具及使用举例主要用于定位的工具有:addr2line和objdump;使用中有两个注意点:(1) 必须使用带symbol的目标文件这两个工具要结合带symbol的目标文件才能达到定位的目的;symbol文件在编译过程中有,一般在最终版本中的目标文件是不带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/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin中指定的以arm-linux-androideabi-xxx命名的工具,因此我们使用的分析工具也必须是这个路径下的工具。2.1 addr2line该工具可以根据debug信息中提供的address(如#00 PC xxxxxxxx),直接定位到代码行。使用及分析过程如下:在debug信息中看到,#00 pc 0000bb96 /system/lib/libreference-ril.so#01 pc 000049e6 /system/lib/libreference-ril.so#02 pc 000070d0 /system/lib/libreference-ril.so#03 pc 000052a6 /system/lib/libril.so1. 查看第一条出错信息: arm-linux-androideabi-addr2line f e libreference-ril.so 0000bb96 at_response_free atchannel_mch.c: 1071这告诉我们出错的代码在文件atchannel_mch.c的at_response_free中,在1071行;但是at_response_free是ril的公共调用,其本身应该没有问题,问题应该在其入参,这必须知道其调用者;2. 查看第二条出错信息: arm-linux-androideabi-addr2line f e libreference-ril.so 000049e6 requestRadioPower reference-ril.c: 3808这告诉我们之前的at_response_free的调用者在文件reference-ril.c的requestRadioPower中,在3808行;这里调用的入参p_response不是NULL,但是其内部成员line为NULL,引起了SIGSEGV段错误。通过代码流程的排查,发现在3670行有了一次free的操作,但是没有将p_response置成NULL,形成了野指针,在3808行的时候,野指针不为NULL,作为有效入参输入,导致了上述的段错误。我们通过addr2line定位到问题出现的点,缩小代码排查范围,达到了快速定位问题的目的。该工具分析过程中,必须结合源码,才能根据代码行分析问题的原因,如果没有源码,就必须依赖下面的工具来分析了。2.2 objdump该工具是用来对目标文件实施反汇编的工具,如果是带symbol的目标文件,反汇编后可以看到部分源码,如果是不带symbol的目标文件,就只能看到汇编码。不带symbol反汇编结果带symbol反汇编结果该工具使用及分析过程如下:在debug信息中看到,#00 pc 0000bb96 /system/lib/libreference-ril.so#01 pc 000049e6 /system/lib/libreference-ril.so#02 pc 000070d0 /system/lib/libreference-ril.so#03 pc 000052a6 /system/lib/libril.so1.反汇编目标文件 arm-linux-androideabi-objdump d S l libreference-ril.so libreference-ril.S这之后生成目标文件的反汇编代码文件libreference-ril.S2.查看错误信息(使用带symbol的目标文件汇编码)在libreference-ril.S中查看0000bb96和000049e6,从查看的结果可以发现,问题点的代码行与addr2line定位出来的是一致的;在没有源码的情况下,我们只能分析到这里,知道这里的调用存在问题,可以用以指导有源码的同事做进一步的代码流程分析。3.查看错误信息(使用不带symbol的目标文件汇编码)在libreference-ril.S中查看0000bb96和00

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论