android调试中怎样使用gcc提供的工具

/************************************************************************************/
/************************************************************************************/
代码对应的工具路径:
mi@mi-OptiPlex-7040:~/code/xxxxx/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin$ ls -al
总用量 31520
drwxrwxr-x  2 mi mi    4096  8月  8 12:18 .
drwxrwxr-x 11 mi mi    4096  8月  8 12:18 ..
-rwxrwxr-x  1 mi mi  855736  8月  8 12:18 aarch64-linux-android-addr2line
-rwxrwxr-x  1 mi mi  884320  8月  8 12:18 aarch64-linux-android-ar
-rwxrwxr-x  1 mi mi 1328832  8月  8 12:18 aarch64-linux-android-as
lrwxrwxrwx  1 mi mi      25  8月  8 12:18 aarch64-linux-android-c++ -> aarch64-linux-android-g++
-rwxrwxr-x  1 mi mi  855352  8月  8 12:18 aarch64-linux-android-c++filt
-rwxrwxr-x  1 mi mi  768520  8月  8 12:18 aarch64-linux-android-cpp
-rwxrwxr-x  1 mi mi 2744392  8月  8 12:18 aarch64-linux-android-dwp
-rwxrwxr-x  1 mi mi   27976  8月  8 12:18 aarch64-linux-android-elfedit
-rwxrwxr-x  1 mi mi  768520  8月  8 12:18 aarch64-linux-android-g++
-rwxrwxr-x  1 mi mi  764424  8月  8 12:18 aarch64-linux-android-gcc
lrwxrwxrwx  1 mi mi      25  8月  8 12:18 aarch64-linux-android-gcc-4.9 -> aarch64-linux-android-gcc
-rwxrwxr-x  1 mi mi  764424  8月  8 12:18 aarch64-linux-android-gcc-4.9.x-google
-rwxrwxr-x  1 mi mi   25440  8月  8 12:18 aarch64-linux-android-gcc-ar
-rwxrwxr-x  1 mi mi   25408  8月  8 12:18 aarch64-linux-android-gcc-nm
-rwxrwxr-x  1 mi mi   25440  8月  8 12:18 aarch64-linux-android-gcc-ranlib
-rwxrwxr-x  1 mi mi  421960  8月  8 12:18 aarch64-linux-android-gcov
-rwxrwxr-x  1 mi mi  450696  8月  8 12:18 aarch64-linux-android-gcov-tool
-rwxrwxr-x  1 mi mi 4515704  8月  8 12:18 aarch64-linux-android-gdb
-rwxrwxr-x  1 mi mi  922552  8月  8 12:18 aarch64-linux-android-gprof
lrwxrwxrwx  1 mi mi      28  8月  8 12:18 aarch64-linux-android-ld -> aarch64-linux-android-ld.bfd
-rwxrwxr-x  1 mi mi 1912608  8月  8 12:18 aarch64-linux-android-ld.bfd
-rwxrwxr-x  1 mi mi 4610056  8月  8 12:18 aarch64-linux-android-ld.gold
-rwxrwxr-x  1 mi mi 2073488  8月  8 12:18 aarch64-linux-android-ld.mcld
-rwxrwxr-x  1 mi mi  866552  8月  8 12:18 aarch64-linux-android-nm
-rwxrwxr-x  1 mi mi 1043608  8月  8 12:18 aarch64-linux-android-objcopy
-rwxrwxr-x  1 mi mi 1482456  8月  8 12:18 aarch64-linux-android-objdump
-rwxrwxr-x  1 mi mi  884320  8月  8 12:18 aarch64-linux-android-ranlib
-rwxrwxr-x  1 mi mi  436136  8月  8 12:18 aarch64-linux-android-readelf
-rwxrwxr-x  1 mi mi  856312  8月  8 12:18 aarch64-linux-android-size
-rwxrwxr-x  1 mi mi  855704  8月  8 12:18 aarch64-linux-android-strings
-rwxrwxr-x  1 mi mi 1043640  8月  8 12:18 aarch64-linux-android-strip


/************************************************************************************/
addr2line:的使用方法:


./aarch64-linux-android-addr2line -h
Usage: ./aarch64-linux-android-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:
  @                Read options from
  -a --addresses         Show addresses
  -b --target=  Set the binary file format
  -e --exe=  Set the input file name (default is a.out)
  -i --inlines           Unwind inlined functions
  -j --section=    Read section-relative offsets instead of addresses
  -p --pretty-print      Make the output easier to read for humans
  -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


使用的格式比较灵活:一般如下:
addr2line -f -e out/target/product/i850/symbols/system/lib/libandroid_runtime.so 000527e8
addr2line -f -e symbols_dir/lib 0xaddress


如下:C/C++的符号都能解析出:
"events_monitor" sysTid=4838
  #00 pc 000000000006a708  /system/lib64/libc.so (recvfrom+4)
  #01 pc 0000000000011008  /system/lib64/libcutils.so (android_logger_list_read+144)
  #02 pc 00000000000125e8  /system/lib64/liboctvm.so (mc_event_poll_stdlog_event+84)
  #03 pc 000000000002826c  /system/lib64/liboctvm.so (klo_poll_events+392)
  #04 pc 0000000000018394  /system/lib64/liboctvm_runtime.so (_ZN7android14SystemKloProxy14KloEventThread10threadLoopEv+128)
  #05 pc 000000000001579c  /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+208)
aarch64-linux-android-addr2line -f -e libbinder.so 000000000002d584
_ZN7android14IPCThreadState14talkWithDriverEb
frameworks/native/libs/binder/IPCThreadState.cpp:856 (discriminator 1)




/************************************************************************************/
android应用崩溃的调试方法
有两种方法可以分析 crash 的堆栈信息


1 google提供了一个python脚本,可以从


http://code.google.com/p/android-ndk-stacktrace-analyzer/
下载这个python脚本,然后使用 adb logcat -d > logfile 导出 crash 的log,
使用 arm-eabi-objdump 位于build/prebuilt/linux-x86/arm-eabi-4.2.1/bin下面
把so或exe转换成汇编代码,如:arm-eabi-objdump -S mylib.so > mylib.asm,
使用脚本


python parse_stack.py


2 直接使用NDK下面的arm-linux-androideabi-addr2line 


(D:\android-ndk-r8\toolchains\arm-linux- 
androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe)


例如:arm-linux-androideabi-addr2line -C -f -e libxxx.so 0x#####(address)




/************************************************************************************/
parse_stack.py和原来使用脚本stack.py是不同的,
stack.py需要提供add2line的工具路径,带符号表的可执行文件,包含PC地址信息的文件


parse_stack.py需要arm-eabi-objdump -S mylib.so > mylib.asm先得到汇编文件




/************************************************************************************/
aarch64-linux-android-objdump:


./aarch64-linux-android-objdump --help
Usage: ./aarch64-linux-android-objdump
 Display information from object .
 At least one of the following switches must be given:


  -S, --source             Intermix source code with disassembly
-S并没有看到源码:C代码,
加上 -l后也没用看到源码,但看到了源码中的行号,也相当于看到源码了




/************************************************************************************/
aarch64-linux-android-gdb:


aarch64-linux-android-gdb 
GNU gdb (GDB) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=aarch64-elf-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word".


  print  variable        查看变量
  print  *array@len      查看数组(array是数组指针,len是需要数据长度)
  可以通过添加参数来设置输出格式:
    /x 按十六进制格式显示变量。
    /d 按十进制格式显示变量。
可以进行简单计算。


root@hydrogen:/system/bin # ./debuggerd64 -b 4431
./debuggerd64 -b 4431
Sending request to dump task 4431.


/************************************************************************************/
可以使用下面的方式,即使没有产生native crash,也可以验证 addr2line等程序
root@hydrogen:/system/bin # ./debuggerd64 -b 4431
./debuggerd64 -b 4431
Sending request to dump task 4431.
----- pid 4431 at 2016-08-11 18:21:32 -----
Cmd line: /system/bin/mcd
ABI: 'arm64'


"mcd" sysTid=4431
  #00 pc 0000000000069cd0  /system/lib64/libc.so (__ioctl+4)
  #01 pc 0000000000073cf4  /system/lib64/libc.so (ioctl+100)
  #02 pc 000000000002d584  /system/lib64/libbinder.so (_ZN7android14IPCThreadState14talkWithDriverEb+164)
  #03 pc 000000000002ddd8  /system/lib64/libbinder.so (_ZN7android14IPCThreadState20getAndExecuteCommandEv+24)
  #04 pc 000000000002def4  /system/lib64/libbinder.so (_ZN7android14IPCThreadState14joinThreadPoolEb+76)
  #05 pc 00000000000033b0  /system/bin/mcd (main+400)
  #06 pc 000000000001976c  /system/lib64/libc.so (__libc_init+100)
  #07 pc 00000000000034dc  /system/bin/mcd


"Binder_1" sysTid=4840
  #00 pc 0000000000069cd0  /system/lib64/libc.so (__ioctl+4)
  #01 pc 0000000000073cf4  /system/lib64/libc.so (ioctl+100)
  #02 pc 000000000002d584  /system/lib64/libbinder.so (_ZN7android14IPCThreadState14talkWithDriverEb+164)
  #03 pc 000000000002ddd8  /system/lib64/libbinder.so (_ZN7android14IPCThreadState20getAndExecuteCommandEv+24)
  #04 pc 000000000002def4  /system/lib64/libbinder.so (_ZN7android14IPCThreadState14joinThreadPoolEb+76)
  #05 pc 00000000000369e8  /system/lib64/libbinder.so
  #06 pc 000000000001579c  /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+208)
  #07 pc 0000000000014fec  /system/lib64/libutils.so
  #08 pc 0000000000067754  /system/lib64/libc.so (_ZL15__pthread_startPv+52)
  #09 pc 000000000001c644  /system/lib64/libc.so (__start_thread+16)


----- end 4431 -----

你可能感兴趣的:(android)