ndk工具使用之arm-eabi-addr2line 【转http://www.2cto.com/kf/201207/140136.html】

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。输入要查看的地址信息。

addr2line工具的使用

上图可做为参考!

首先进入android工程所在目录,执行addr2line -e *.so文件,后面根据logcat打出来信息查找错误。

附代码定位参考图:

addr2line工具的使用

posted @ 2013-03-29 17:29  songtzu  阅读(1104)  评论(0编辑  收藏  举报