- ndk工具使用之arm-eabi-addr2line
-
$ arm-eabi-addr2line.exe --help
Usage: arm-eabi-addr2line [option(s)] [addr(s)]
Convert addresses into line number/file name pairs.
If no addresses are specified on the command line, they will be read from stdin
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
arm-eabi-addr2line: supported targets: elf32-littlearm elf32-bigarm elf32-little elf32-big srec symbolsrec tekhex binary ihex
Report bugs to <http://www.sourceware.org/bugzilla/>作用:
so绝对地址到代码行数的计算,以及相关代码行数信息的获取
注意点:
1.绝对地址=so加载的起始地址 - 当前出错代码地址(如pc,或lr等)
2.so必须是要附号信息的
常用实例:
[java]
arm-eabi-addr2line.exe -C -f -e ./xxx.so 0x186759另外附一个例子
使用addr2line实现查看C代码栈中的信息定位到程序的代码。(个人理解,直白点就是当我的程序出现bug后,会在eclipse的logcat一些错误信息,但是C代码只会打印出栈中的信息)
1。 addr2line工具所在目录:D:\android-ndk-r8\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin
2。 android工程所在目录: 定位到你工程的要目录即可. (PROJECT_HOME)
3。执行:D:\android-ndk-r8\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe -e PROJECT_HOME\obj\local\armeabi\出错的.so
4。输入要查看的地址信息。
上图可做为参考!
首先进入android工程所在目录,执行addr2line -e *.so文件,后面根据logcat打出来信息查找错误。
附代码定位参考图: