android调试中怎样使用gcc提供的工具
来源:互联网 发布:oracle java 编辑:程序博客网 时间:2024/06/05 16:32
/************************************************************************************/
/************************************************************************************/
代码对应的工具路径:
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 -----
0 0
- android调试中怎样使用gcc提供的工具
- Android 调试中 addr2line 工具的使用
- Android 调试中 addr2line 工具的使用
- GCC各种调试工具使用简介
- 使用Eclipse中提供的Refactor(重构)工具
- 使用Eclipse中提供的Refactor(重构)工具
- 使用Eclipse中提供的Refactor(重构)工具
- 使用Eclipse中提供的Refactor(重构)工具
- 使用Eclipse中提供的Refactor(重构)工具
- 使用Eclipse中提供的Refactor(重构)工具
- 使用Eclipse中提供的Refactor(重构)工具
- 使用Eclipse中提供的Refactor(重构)工具
- Android调试工具adb的使用
- Android 调试工具 DDMS的使用
- android 调试工具ADB的使用
- Android调试工具adb的使用详解
- Android Linux调试工具的使用
- Android性能调试工具的使用
- OJ------等差数列
- 深度学习算法实践9---用Theano实现多层前馈网络
- 矩阵元素相乘----搜狗2016研发工程师编程题
- 轻量级RPC框架fox(一)
- iOS 最新版 CocoaPods 的安装流程
- android调试中怎样使用gcc提供的工具
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- HDU5826 physics
- C++学习001-注释
- Linux捕捉信号相关
- hdu1257 最少拦截系统(LIS)
- jQuery.extend和jQuery.fn.extend的区别
- HttpURLConnection 注意导入包和这个英文的拼写
- Wilbur and Swimming Pool