时根据backtrace定位问题的方法

上传人:ba****u 文档编号:161506894 上传时间:2022-10-14 格式:DOCX 页数:6 大小:82.94KB
收藏 版权申诉 举报 下载
时根据backtrace定位问题的方法_第1页
第1页 / 共6页
时根据backtrace定位问题的方法_第2页
第2页 / 共6页
时根据backtrace定位问题的方法_第3页
第3页 / 共6页
资源描述:

《时根据backtrace定位问题的方法》由会员分享,可在线阅读,更多相关《时根据backtrace定位问题的方法(6页珍藏版)》请在装配图网上搜索。

1、进程异常终止时根据 backtrace 定位问题的方法项目中经常会遇到进程异常终止的问题,本文介绍的是根据log中打印出来的backtrace定 位问题点的方法。1.如何获取debug信息当异常发生时,一般会有两个地方保存backtrace和stack;(1) Logcat 一般在main log里面,关键字是“DEBUG”;文件中一般在/data/tombstones,以 tombstone_XX 命名的文件;一般是有如下的格式:3-j.lld. fingerprint:1 ETE/U930HD/U930HD: 4.0.3/IML74K/eng. root .20121116.042147

2、: eng/release-keys 1pid:3E2r tid: 3BE/syatera/Jain/rild 丈丈丈signal 11 (SIGSEGV, code 1 (SEGV_MAPERRr fault addr 00000007rO OO0Oa628rllO0ff6c8r2aa86cll5r3aa8cll500000003r50000a628r64018f343r7ffffffffrS Oigozac.rS013ai6cl3100189alerpOisrisip 00000000splOOffhOSIr4017i9ebpc40182b96 cpsr 20000030#00PC0000

3、fcb96/ syst 已工已:E 已工已 nu 已一工 j.1. soPC000049已石/ 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 的目标文件

4、这两个工具要结合带 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 的交叉编译器,我

5、们分析问题模块时,需要使 用的工具版本必须和编译过程中指定的arm编译器一致;以联芯为例,编译时使用 的 gcc 版本是prebuildt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin中指定的以 arm-linux-androideabi-xxx 命名的工具,因此我们使用的分析工具也必须是这个路径 下的工具。2.1addr2line该工具可以根据debug信息中提供的address(如#00 PC xxxxxxxx),直接定位到代码行。 使用及分析过程如下:在debug信息中看到,#00 pc 0000bb96 /system/lib/

6、libreference-ril.so#01 pc 000049e6 /system/lib/libreference-ril.so#02 pc 000070d0/system/lib/libreference-ril.so#03pc 000052a6/system/lib/libril.so1.査看第一条出错信息: arm-linux-androideabi-addr21ine -f -e libreference-ril.so 0000bb96 at_response_free atchannel_mch.c: 1071这告诉我们出错的代码在文件atchannel_mch.c的at_res

7、ponse_free中,在1071行;void at_eSpnSe_fee (ATResponse 大p response)0105701058010590106001061010620106301064010650106601067010680106901070 但是 at_respO 知道其调01074:2.查看第二条出错信息e (p_response-finalResponse); arm-linux-androidea!bi-addr2iinef s-p iJbrfTbnce-ril.so 000049e6 requestRadiOPower吐贺00门託 亓從?ATLine line;

8、if (p response = NULL) r&turii;p_Line = p response-p_intEi/mEdi日tes;while (p_line 1= NULL) ATLine *p 七oFree;p_toF ree = p_line; p_line = p_li ne-p_ne xt;I nse_free是ril的公共週用,其本身应该没有问题,问题应该在其入参,这必 用者;free (p_t oF ree ); reference-ril.c: 3808这告诉我们之前的at_response_free的调用者在文件reference-ril.c的requestRadioPo

9、wer中, 在 3808 行;03806: ? end if onOff088isState = =R.ADI. ?03807:03B0B:at response free(p_response) ;|03809 :RIL onRequest Complete (t f RIL E SUCCE S S f NULL, Cl)这里调用的入参p_response不是NULL,但是其内部成员line为NULL,引起了 SIGSEGV 段错误。通过代码流程的排查,if () /line 3451/*tnrn off*/-else/*tnrn on*/if () /line 3625-:at respo

10、nse free (p response) /debug /line 3670else /line 3676at_response_free(p_re5ponse); /line 3303发现在3670行有了一次free的操作,但是没有将p_response置成NULL,形成了野指针, 在3808行的时候,野指针不为NULL,作为有效入参输入,导致了上述的段错误。我们通过addr2line定位到问题出现的点,缩小代码排查范围,达到了快速定位问题的目的。该工具分析过程中,必须结合源码,才能根据代码行分析问题的原因,如果没有源码,就必 须依赖下面的工具来分析了。2.2 objdump该工具是用来对

11、目标文件实施反汇编的工具,如果是带symbol的目标文件,反汇编后可以 看到部分源码,如果是不带symbol的目标文件,就只能看到汇编码。00002af0:2af0:e92d41fUstmdbsp ! rr4, r5,r6f rlf r8f1匚2af4:4c2 6ldrpc,#152;(2b9u )2af 6:f ldOU5D1rstosrQf #12af a:bf38it cc2af c :2500movcc2af e :2a00cmp r2 x21300:bf08it eq2b02 :045U5D1rreq不带yimbol反汇编話结果带 symbol 反汇编结果该工具使用及分析过程如下:在

12、 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这之后生成目标文件的反汇编代码文件libref

13、erence-ril.S2査看错误信息(使用带symbol的目标文件汇编码)在 libreference-ril.S 中查看 0000bb96 和 000049e6,/ home/ ganhui1iang/LC/lc1810/develop/ap/base/android-4 0 3_r1/leadcore/hardware/ril/leadcore-r i1/atchannel_mch c:1071 ATLine p_toFree;p_toFree = p_line;p_liiie = p_ line- p_nex t;free i:p toFree-line);bb96:6860ldr r

14、O, r4. #理|/home/ganhui1iang/LC/lc1810/develop/ap/toase/android-4 0 3_r1/leadcore/hardware/ril/leadcore-ril/reference-ril c:3808 L OGD (rr=re quest- Rad i o Po we rt he g_dat ac a 11 s % d is initial ized,rf i :i ;:!/ 古added toy huaiigyong 2 012-09-2 7 end古/:!曰匸 irmwge free (p response);49e4:980alclr

15、 rO, sp, #40; 0x2 849e6 :f 007 f 8dl bl JakiSc 从查看的结果可以发现,问题点的代码行与addr2line定位出来的是一致的;在没有源码的情况下,我们只能分析到这里,知道这里的调用存在问题,可以用以指导有源 码的同事做进一步的代码流程分析。3查看错误信息(使用不带symbol的目标文件汇编码)在 libreference-ril.S 中查看 0000bb96 和 000049e6,对于熟悉汇编码的人可以通过以上定位到问题出现地方,达到相同的分析效果。000bb8匚 kikiSc :to570push心r6r6f lrbbSe:4605inovrObki90 :tol88cfciz r0,bb92 :6884ldr口#B:e007b.n bba6bb9 6:6860ldr rO,曲r#幻bb98 :682 6ldr r6f匸化#addr2line 和 objdump 的使用可以加速定位进程异常的原因,在平时的调试中作用很大。这 两个命令在 linux 中也是提供了的,对于 linux 问题分析同样有效。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!