/************************************************************************************/
/************************************************************************************/
代码对应的工具路径:
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:
@<file> Read options from <file>
-a --addresses Show addresses
-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
-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 <asm-file> <logcat-file>
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 <option(s)> <file(s)>
Display information from object <file(s)>.
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 <http://gnu.org/licenses/gpl.html>
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:
<http://source.android.com/source/report-bugs.html>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
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 -----
/************************************************************************************/
代码对应的工具路径:
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:
@<file> Read options from <file>
-a --addresses Show addresses
-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
-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 <asm-file> <logcat-file>
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 <option(s)> <file(s)>
Display information from object <file(s)>.
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 <http://gnu.org/licenses/gpl.html>
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:
<http://source.android.com/source/report-bugs.html>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
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 -----