Log分析技巧

 

1.关键字查找:(用于筛选,或者已知问题查找)

1.1由现象快速查找定位

经验主义,通过以往大量log的分析经验, 熟悉已知的fail log。

比如CameraApp Crash log: force stopping com.asus.camera

Camera HAL/daemon crash:backtrace:

其他fail/error

 

1.2查找log中关键字常用工具

文本工具

Geany : Ctrl+F, then input example: error|fail 查找打开文件带有error,或者fail的行  5星推荐

Sublime: Ctrl + F

Gedit: Ctrl + F

Ubuntu下多文件关键字查找命令

$:grep -ria “error\|fail” 查找目录下面全部的带有error,或者fail的行

 

2.對比法:(用于确定之前没有遇到的新问题)

2.1与之前正常的log对比

确定复现步骤,抓出复现log,并和自身正常log对比:例如关机异常,则用异常关机那段时间的log与正常关机的log对比

 

2.2与其他正常机子对比:(同一型号的情况下,多用排除是不是硬件问题导致单机问题)

确定复现步骤,抓出复现log,并和其他正常log对比:如关机异常,则用异常关机那段时间的log与正常关机的log对比 

 

2.3工具:beyond compare,sublime

beyond compare:自动比较工具

Sublime:手动比较

 

3.Crash log 分析 (非开发者仅可作为找问题辅助参考工具)

程序crash是最严重的bug,crash的时候,大部分程序都会打印自己的backtrace,也就是函数调用栈。

 

3.1 Backtrace分析

例如下面的backtrace

pid: 24925, tid: 15718, name: CAM_MctServ  >>> /system/bin/mm-qcamera-daemon <<<

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8 mm-qcamera-daemon 程序收到segmentation violation错误通知退出,crash原因是:访问了 错误地址

...

backtrace: (调用顺序而上)

    #00 pc 000126bc  /system/vendor/lib/libmmcamera2_mct.so (mct_list_append+37) 

crash发生在最后一个函数mct_list_append里面,代码段地址000126bc

    #01 pc 0000c215  /system/vendor/lib/libmmcamera2_mct.so (mct_object_set_branch_parent+28)

    #02 pc 0000de8f  /system/vendor/lib/libmmcamera2_mct.so (mct_stream_link_branch_modules+98)

    #03 pc 0000e9cd  /system/vendor/lib/libmmcamera2_mct.so

    #04 pc 00008bcd  /system/vendor/lib/libmmcamera2_mct.so

    #05 pc 000093b7  /system/vendor/lib/libmmcamera2_mct.so

    #06 pc 0000b2d7  /system/vendor/lib/libmmcamera2_mct.so

    #07 pc 0003fa33  /system/lib/libc.so (_ZL15__pthread_startPv+30)

    #08 pc 00019fc5  /system/lib/libc.so (__start_thread+6)

 

3.2定位crash位置

1有源代码时候,定位工具 addr2line/arm-addr2line

获取symbol文件,编译源码会生成一个带有符号表的同名程序例如

./symbols/system/vendor/lib/libmmcamera2_mct.so

运行命令$:addr2line  000126bc  -e ./symbols/system/vendor/lib/libmmcamera2_mct.so

 

运行实例:

vicent@vicentPC:~/disk2/Hades_Test/out/target/product/Z01H$ addr2line  000126bc  -e ./symbols/system/vendor/lib/libmmcamera2_mct.so

/home/vicent/disk2/Hades_Test/vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/mct//tools/mct_util.c:128 (discriminator 1)

Crash位置为:mct_util.c:128

 

2没有源代码的时候,定位工具 objdump/arm-linux-androideabi-objdump

由于objdump 为反汇编工具,定位的源码是汇编语言,不能用于定位所有程序的crash位置,在没有源码无可奈何的时候,可作为分析的手段。

[    98.034] (EE) Backtrace:

[    98.050] (EE) 0: /usr/lib/xorg/Xorg (xorg_backtrace+0x4a) [0x5564c38399fa]

[    98.051] (EE) 1: /usr/lib/xorg/Xorg (0x5564c3680000+0x1bdd69) [0x5564c383dd69]

[    98.051] (EE) 2: /lib/x86_64-linux-gnu/libc.so.6 (0x7f4414093000+0x35860) [0x7f44140c8860]

[    98.051] (EE) 3: /usr/lib/xorg/Xorg (DRI2CloseScreen+0x35) [0x5564c380cfc5]

[    98.051] (EE) 4: /usr/lib/xorg/modules/drivers/modesetting_drv.so (0x7f44101c6000+0x6e88) [0x7f44101cce88]

[    98.051] (EE) 5: /usr/lib/xorg/Xorg (0x5564c3680000+0xc7547) [0x5564c3747547]

[    98.051] (EE) 6: /usr/lib/xorg/Xorg (0x5564c3680000+0x138d82) [0x5564c37b8d82]

[    98.051] (EE) 7: /usr/lib/xorg/Xorg (0x5564c3680000+0xe5978) [0x5564c3765978]

[    98.051] (EE) 8: /usr/lib/xorg/Xorg (0x5564c3680000+0x137034) [0x5564c37b7034]

[    98.051] (EE) 9: /usr/lib/xorg/Xorg (0x5564c3680000+0x57531) [0x5564c36d7531]

[    98.051] (EE) 10: /lib/x86_64-linux-gnu/libc.so.6 (__libc_start_main+0xf1) [0x7f44140b33f1]

[    98.051] (EE) 11: /usr/lib/xorg/Xorg (_start+0x2a) [0x5564c36c133a]

 

命令$: objdump -d -S -l  /usr/lib/xorg/Xorg > source.S| grep -i “1bdd69”

 

3.3其他

Ubuntu crash

https://wiki.ubuntu.com/Apport

/var/crash/

apport-retrace使用

http://www.piware.de/2011/08/apport-retrace-made-useful/

apport-retrace -s -S system /var/crash/_usr_bin_gedit.1000.crash

apport-retrace -g -S system /var/crash/_usr_bin_gedit.1000.crash

 

 

你可能感兴趣的:(Android源码,语言基础)