当前位置: 首页 > news >正文

Android设备:Linux远程gdb调试


更多内容:XiaoJ的知识星球


目录

      • 1.准备工作
        • 1)安装Android NDK:
        • 2)连接Android手机
        • 3)编译程序
      • 2.启动gdbserver
        • 1)**推送gdbserver及可执行文件**:
        • **2)启动gdbserver**:
        • 3)设置端口转发
      • 3.GDB连接gdbserver
      • 4.调试


Linux服务器上,使用Android手机进行GDB调试C/C++程序,步骤如下:

1.准备工作

1)安装Android NDK:

Linux服务器上安装Android NDK,因为需要以下工具:

  • 1.gdb 和 gdbserver。

  • 2.clang交叉编译工具链。安装工具,需要包含:

请自行安装(建议使用android-ndk-r23c,后面版本无gdbserver)

  • 下载解压NDK:https://developer.android.google.cn/ndk/downloads?hl=zh-cn

  • 指定版本NDK: https://github.com/android/ndk/wiki/Unsupported-Downloads

2)连接Android手机

(1)启用开发者选项和USB调试:

  • 在手机上,进入“设置”>“关于手机”,找到“版本号”,连续点击7次以启用开发者选项。

  • 然后返回“设置”菜单,进入“开发者选项”,启用USB调试。

(2)连接设备:USB线将Android手机连接到Linux服务器。

3)编译程序

使用NDK工具链编译你的代码,并确保加上-g选项以生成调试信息。例如:

ndk-build APP_ABI=armeabi-v7a NDK_DEBUG=1

2.启动gdbserver

1)推送gdbserver及可执行文件

将NDK提供的gdbserver推送到Android手机上:

adb push <NDK-path>/prebuilt/android-arm/gdbserver/gdbserver /data/local/tmp/
adb push your_app /data/local/tmp/
2)启动gdbserver

在Android手机上启动gdbserver,让它监听一个端口,并附加到你的应用程序:

adb shell
su
cd /data/local/tmp
./gdbserver :1234 ./your_app
3)设置端口转发

将Linux服务器上的端口转发到Android手机上的端口:

adb forward tcp:1234 tcp:1234

3.GDB连接gdbserver

# 启动GDB
<NDK-path>/prebuilt/linux-x86_64/bin/gdb# 连接到gdbserver
(gdb) set solib-search-path /path/to/your/libs
(gdb) file /path/to/your_app
(gdb) target remote localhost:1234

4.调试

在GDB中,你可以设置断点、单步执行、查看变量等,进行调试:

(gdb) break main
(gdb) continue
(gdb) next
(gdb) print variable_name

结束调试

# 结束gdbserver监听:
Ctrl + C#退出GDB
(gdb) quit#清理端口转发
adb forward --remove tcp:1234

.


声明:资源可能存在第三方来源,若有侵权请联系删除!

http://www.lryc.cn/news/523501.html

相关文章:

  • (十四)WebGL纹理坐标初识
  • 【机器学习】制造业转型:机器学习如何推动工业 4.0 的深度发展
  • Nginx安装配置Mac使用Nginx访问前端打包项目
  • 国自然面上项目|基于组合机器学习算法的病理性近视眼底多模态影像资料自动化定量分析研究|基金申请·25-01-18
  • 03_UI自适应
  • Python在DevOps中的应用:自动化CI/CD管道的实现
  • API接口技术推动电商数据处理的自动化
  • Nginx反向代理架构介绍
  • .Net Core微服务入门系列(一)——项目搭建
  • WPF 实现可视化操作数据库的程序全解析
  • python mysql库的三个库mysqlclient mysql-connector-python pymysql如何选择,他们之间的区别
  • 如何将数据库字符集改为中文,让今后所有的数据库都支持中文
  • Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?
  • EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成
  • Docker Compose的使用
  • [STM32 HAL库]串口空闲中断+DMA接收不定长数据
  • 三、华为交换机 Hybrid
  • 如何通过 Apache Airflow 将数据导入 Elasticsearch
  • Android Studio:Linux环境下安装与配置
  • token是用来鉴权的,那session是用来干什么的?
  • 基于 WEB 开发的二手车辆销售管理系统设计与实现
  • wordpress的火车头商品发布接口
  • 浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索
  • 总结3..
  • 信息奥赛一本通 1168:大整数加法
  • 3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南
  • 横盘出击的三种经典走势形态,买点以及需要注意的问题技术详解
  • 处理没有提示的字符串、计算相隔天数应用题
  • 【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程表 实现 Trie (前缀树)(C++)
  • react使用react-redux状态管理