@(Android研究)[android|gdb]html
[TOC]linux
如今须要将Linux上的工具移植到Android上,一般Linux上代码是经过Makefile管理编译选项,为了直接使用Makefile而不使用Android.mk文件,则须要使用Android NDK的编译工具链进行交叉编译,成功时会输出一个可在Android上运行的ELF可执行文件,在本文中假设这个ELF可执行文件名为"android-exe"。本文介绍如何在本机(本文中的本机系统是Linux)上经过GDB远程调试Android上的"android-exe"。android
个人Android NDK的版本:android-ndk-r11b。shell
步骤一、2是为了本机GDB远程调试时能够找到Android系统库的符号。eclipse
在adb shell中进入"/data/local/tmp/"目录,而后执行下面的命令:tcp
gdbserver :1234 android-exe
1234表示gdb监听的调试端口,android-exe是被调试的ELF可执行程序。ide
若是调试的程序须要传入参数,那么输入命令:gdbserver :1234 android-exe [参数...]工具
在本机上输入下面的命令重定向端口:ui
adb forward tcp:1234 tcp:1234
输入下面的命令进行调试命令行
$NDK/prebuilt/linux-x86_64/bin/gdb android-exe
这里的"android-exe"是指本机上android-exe的存储位置。
执行上面的命令后将会进入GDB命令行界面:
(gdb)
在GDB命令行界面中远程链接gdbserver
target remote :1234
1234表明端口号。
在GDB命令行界面中设置库搜索路径
set solib-search-path $SYSTEM_LIB:$SYSTEM_BIN:$PLATFORMS_21_LIB
这一步是为了本机上GDB远程调试时能够找获得符号。
info reg
设置:
b <符号名>
b <文件路径>:行号
查看:
info break
tb <符号名>
c
n
s
print <变量名>
print也能够打印指针值:print *<指针变量名>。
where