arm-eabi-addr2line
Usage: arm-eabi-addr2line [option(s)] [addr(s)]
for example:
D:\gat\iBox\TRUNK\lib>arm-eabi-addr2line -e "D:\*.out.symbols\alps\out\target\product\*\symbols/../../../../../kernel/vmlinux" c0037aa0
The options are:
@<file> Read options from <file>
-b --target=<bfdname> Set the binary file format
-e --exe=<executable> Set the input file name (default is a.out)
-i --inlines Unwind inlined functions
-j --section=<name> Read section-relative offsets instead of addresses
-s --basenames Strip directory names
-f --functions Show function names
-C --demangle[=style] Demangle function names
-h --help Display this information
-v --version Display the program's version.
常用-f, -C, -e.
KE debug的方法:
首先在在dump的kernel log中找[<>]这样的东西,然后再通过addr2line在vmlinux中找到其对应的line
有的地址,比如bf开头的是debug不了的,因为3GB-8MB ~ 3GB是kernel module载入的地址,而vmlinux中没有module的symbol table.
NE debug的方法
首先在ne log中找signal 11 (SIGSEGV), fault addr baae8fd1
的东西,找到后
通过分析,如果fault addr 是deaddead,那就表示heap error出现,然后再看是deadadd0,就是heap corruption,如果是deadadd0,就是heap usage error.
然后将heap信息保存下载
然后再通过将signal 11 (SIGSEGV), fault addr baae8fd1中的地址通过addr2line来进行转换得道C库出错的地址
NE的decode是通过
#01 pc 0001cd4a /system/lib/libc.so
中间后面libc.so的路径,将其加到symbols path后面,然后再通过addr2line来解析出来。
arm-eabi-addr2line -f -C -e D:\gat\Department\SP_SS\OSS5_ST_Share\GAT\TRUNK\Test_Cases\NE\ztemt73v2_ALPS.GB.p52_eng.out.symbols\alps\out\target\product\ztemt73v2\symbols\system\lib\libc.so 0001cd0e
输出的话就是
__findenv
/alps/GB/Of/alps/bionic/libc/stdlib/getenv.c:90