android调试中怎样使用gcc提供的工具
16lz
2021-01-26
/************************************************************************************/
/************************************************************************************/
代码对应的工具路径:
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
/************************************************************************************/
代码对应的工具路径:
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:
@
-a --addresses Show addresses
-b --target=
-e --exe=
-i --inlines Unwind inlined functions
-j --section=
-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