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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章