前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GDB与GDBServer配合实现在安卓设备中进行程序调试

GDB与GDBServer配合实现在安卓设备中进行程序调试

作者头像
乱码三千
发布2021-08-24 14:52:25
1.7K0
发布2021-08-24 14:52:25
举报
文章被收录于专栏:乱码三千

实验环境

  • windows开发平台
  • 安卓模拟器(ARM架构+linux系统 已Root): 可以通过adb shell getprop指令查看当前设备的cpu架构
  • arm-linux-androideabi编译工具 gdbgdbserver皆存放在此开发包下

实验开始

第一步 编写测试代码 文件名为test.c

代码语言:javascript
复制
#include <stdio.h>

int main(){
 	char *a="he"
	printf("hello pangshu");
	return 0;
}

第二步 将测试代码编译成可执行文件

代码语言:javascript
复制
arm-linux-androideabi-gcc.exe -g test.c -o main -static #输出可执行文件名为main

第三步 将可执行文件传送到模拟器中

代码语言:javascript
复制
adb push main /data/local/tmp

第四步 将gdbserver工具传送到模拟器中

代码语言:javascript
复制
adb push gdbserver /data/local/tmp

第五步 进入模拟器shell窗口,使用gdbserver执行程序

代码语言:javascript
复制
./gdbserver 192.168.177.71:23946 main #这里的ip是宿主机的ip  23946为监听端口

第六步 在宿主机中运行gdb工具

代码语言:javascript
复制
gdb.exe main  #这里需要指定调试的执行文件

此时进入到gdb模式

第七步 在gdb模式下连接模拟器中的gdbserver

代码语言:javascript
复制
(gdb) target remote 192.168.0.1:23946  #这里的ip是模拟器的ip

连接成功后进入断点调试模式,该模式下可以使用~调试指令进行相关调试

开始调试

使用list指令列出所有源代码 可简写为l

使用break指令设置断点位置 可简写为b

使用continue指令运行到断点处 可简写为c

使用step指令进行单步执行 可简写为s

使用next执行进行单步执行 可简写为n

使用print指令打印变量的值 可简写为a

使用quit指令退出调试模式 可简写为q

更多调试指令

GCC调试工具GDB的常用指令

关于arm-linux-androideabi的获取

建议下载Android NDK开发包,然后将里面的GCC套件单独抽出来使用,NDK提供了抽包脚本make-standalone-toolchain,在bulid目录的tools文件夹中可以找到,执行脚本自动抽取打包成压缩包到当前目录:

代码语言:javascript
复制
python make-standalone-toolchain.py --arch arm

附加

如果是在非安卓系统的ARM模拟器上,比如qemu模拟器,那么直接使用官方的arm-none-linux-eabi即可,即便是安卓设备,如果没有代码调试需求的话,仅仅是编译运行程序,也是完全够用了

但是你需要进行代码调试的话,由于android系统的安全策略,arm-none-linux-eabi包中的gdbserver无法运行,提示:

代码语言:javascript
复制
error: only position independent executables (PIE) are supported.

为了解决这个问题,我们因此采用arm-linux-androideabi,这里面的gdbserver可以正常运行

上面的例子中使用的NDKr17的版本

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乱码三千 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验环境
  • 实验开始
  • 开始调试
    • 更多调试指令
      • 关于arm-linux-androideabi的获取
      • 附加
      相关产品与服务
      专用宿主机
      专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档