当前位置: 首页 > 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

.


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

相关文章:

Android设备:Linux远程gdb调试

更多内容&#xff1a;XiaoJ的知识星球 目录 1.准备工作1&#xff09;安装Android NDK&#xff1a;2&#xff09;连接Android手机3&#xff09;编译程序 2.启动gdbserver1&#xff09;**推送gdbserver及可执行文件**&#xff1a;**2&#xff09;启动gdbserver**&#xff1a;3&am…...

(十四)WebGL纹理坐标初识

纹理坐标是 WebGL 中将 2D 图像&#xff08;纹理&#xff09;应用到 3D 物体表面的重要概念。在 WebGL 中&#xff0c;纹理坐标通常使用一个二维坐标系&#xff0c;称为 uv 坐标&#xff0c;它们决定了纹理图像如何映射到几何体上。理解纹理坐标的核心就是明白它们如何将二维纹…...

【机器学习】制造业转型:机器学习如何推动工业 4.0 的深度发展

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 引言 在当今科技飞速发展的时代&#xff0c;制造业正经历着前所未有的变革&#xff0c;工业4.0的浪潮席卷而来。工业4.0旨在通过将…...

Nginx安装配置Mac使用Nginx访问前端打包项目

目录 Linux安装环境变量配置 WinMac安装基本配置 Mac使用Nginx访问前端项目常用命令 Linux 官网&#xff1a;https://nginx.org/ 中文官网&#xff1a;https://nginx.p2hp.com/ 安装 http://nginx.org/en/download.html 1). 安装依赖包 由于nginx是基于c语言开发的&#x…...

国自然面上项目|基于组合机器学习算法的病理性近视眼底多模态影像资料自动化定量分析研究|基金申请·25-01-18

小罗碎碎念 今天和大家分享一个面上项目&#xff0c;资助年限为2020&#xff5e;2023&#xff0c;直接费用为55万。 病理性近视致盲问题严峻&#xff0c;机制和诊疗策略尚待探索。本项目基于前期积累的大量影像资料和算法开发工作&#xff0c;计划构建标准影像数据库&#xff0…...

03_UI自适应

因为Canvas大小是始终和屏幕一致的 所以设置Canvas的屏幕大小 通常设置为1920 * 1080 又因为屏幕的图像及按钮如果想适配各种显示屏需要锁定长或者宽&#xff0c; 之后利用钉子将其他图像利用创建空节点定在左右或者上下两侧 比如unity编辑器通常是锁定宽的&#xff0c;那我…...

Python在DevOps中的应用:自动化CI/CD管道的实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门&#xff01; 解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 在现代软件开发中&#xff0c;DevOps理念的引入极大地提升了开发与运维的协作效率&#xff0c;而持续集成&#xff08…...

API接口技术推动电商数据处理的自动化

在当今数字化浪潮中&#xff0c;电商行业正以前所未有的速度发展。API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;接口技术在这一过程中扮演着至关重要的角色。API接口作为连接不同系统和服务的关键桥梁&#xff0c;通过其自动化处…...

Nginx反向代理架构介绍

Nginx反向代理架构是一种强大的服务器架构模式&#xff0c;它位于用户和原始服务器之间&#xff0c;接收用户的请求并将其转发到一个或多个后端服务器&#xff0c;然后将从后端服务器获取的响应返回给用户&#xff0c;就好像这些内容都是由代理服务器本身直接提供的一样。以下是…...

.Net Core微服务入门系列(一)——项目搭建

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…...

WPF 实现可视化操作数据库的程序全解析

在软件开发中&#xff0c;实现对数据库的可视化操作能极大提升开发效率和用户体验。借助 WPF&#xff08;Windows Presentation Foundation&#xff09;强大的界面开发能力&#xff0c;我们可以打造出功能丰富、交互友好的数据库操作程序。本文将详细介绍如何使用 WPF 搭建一个…...

python mysql库的三个库mysqlclient mysql-connector-python pymysql如何选择,他们之间的区别

三者的区别 1. mysqlclient 特点&#xff1a; 是一个用于Python的MySQL数据库驱动程序&#xff0c;用于与MySQL数据库进行交互。 依赖于MySQL的本地库&#xff0c;因此在安装时需要确保系统上已安装了必要的依赖项&#xff0c;如libmysqlclient-dev等。 性能较好&#xff0c…...

如何将数据库字符集改为中文,让今后所有的数据库都支持中文

最后一行有我自己的my.ini文件 数据库输入中文数据时会变为乱码&#xff0c; 这个时候&#xff0c;我们为每个数据库设置字符集&#xff0c;太过于麻烦&#xff0c;为数据库单独设置重启后又会消失 Set character_set_database’utf8’; Set character_set_server’utf8’; …...

Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?

Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控)的性能。现有的视频修复方法虽然取得了一些进展,但通常只能针对特定的退…...

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成 1所有的材料都可以在EAMM: One-Shot Emotional Talking Face via Audio-Based Emotion-Aware Motion Model网站上找到。 摘要 尽管音频驱动的对话人脸生成技术已取得显著进展&#xff0c;但现有方法要么忽…...

Docker Compose的使用

文章首发于我的博客&#xff1a;https://blog.liuzijian.com/post/docker-compose.html 目录 Docker Compose是什么Docker Compose安装Docker Compose文件Docker Compose常用命令案例&#xff1a;部署WordPress博客系统 Docker Compose是什么 Docker Compose是Docker官方的开源…...

[STM32 HAL库]串口空闲中断+DMA接收不定长数据

一、空闲中断 STM32的串口具有空闲中断&#xff0c;什么叫做空闲呢&#xff1f;如何触发空闲中断呢&#xff1f; 空闲&#xff1a;串口发送的两个字符之间间隔非常短&#xff0c;所以在两个字符之间不叫空闲。空闲的定义是总线上在一个字节的时间内没有再接收到数据。触发条件…...

三、华为交换机 Hybrid

一、Hybrid功能 Hybrid口既可以连接普通终端的接入链路&#xff08;类似于Access接口&#xff09;&#xff0c;又可以连接交换机间的干道链路&#xff08;类似于Trunk接口&#xff09;。它允许多个VLAN的帧通过&#xff0c;并可以在出接口方向将某些VLAN帧的标签剥掉&#xff0…...

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…...

Android Studio:Linux环境下安装与配置

更多内容&#xff1a;XiaoJ的知识星球 Android Studio&#xff1a;Linux环境下安装与配置 1.安装JDK2.安装Android Studio2.1 获取安装包2.2 安装&#xff08;1&#xff09;配置环境变量&#xff1a;&#xff08;2&#xff09;运行安装&#xff1a;&#xff08;3&#xff09;配…...

Ubuntu 22 Server 直传百度网盘实战:成功可用的完整流程

我的目标很明确&#xff1a;把 Ubuntu 22 Server 上的数据直接上传到百度网盘&#xff0c;然后在 Windows 版百度网盘里下载。实际踩坑后&#xff0c;最终可用的方案是&#xff1a;不用账号密码直登类工具改用 bypy通过授权码绑定百度网盘把服务器文件上传到百度网盘的 我的应用…...

郭老师-如何判断一个人有没有领导力

如何判断一个人有没有领导力 ——从魅力到思想力的四重修炼“真正的领导力&#xff0c; 不在于个人魅力&#xff0c; 而在于—— 带领团队做出成绩&#xff0c; 赢得信任&#xff0c; 并拥有清晰的战略思想。”&#x1f33f; 领导力的核心&#xff0c; 是绩效导向&#xff0c; …...

语言介绍、软件安装、项目创建、输出语句、注释

C# 语言简绍C#是什么&#xff1f;1.C# 编程是基于 C 和 C 编程语言衍生出来的面向对象的编程语言2.C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。C#与C和C的对比1.C#是由C和C衍生出来的面向对象的编程语言。2.它在继承C和C强大功能的同时去…...

告别有线!用ESP32和Arduino IDE打造你的专属蓝牙音箱(保姆级教程)

用ESP32打造高性价比蓝牙音箱&#xff1a;从硬件组装到音频调优全指南 你是否厌倦了市面上千篇一律的蓝牙音箱&#xff1f;想要一个既能展现个性又具备专业音质的无线音频设备&#xff1f;ESP32开发板加上一些基础电子元件&#xff0c;就能让你以不到200元的成本打造出媲美千元…...

告别Hello World:用TensorFlow Lite Micro在Arduino上部署你的第一个TinyML模型(附完整代码)

从零到硬件&#xff1a;TinyML模型在Arduino上的完整部署指南 当我在三年前第一次尝试将机器学习模型部署到Arduino Nano 33 BLE Sense开发板上时&#xff0c;LED灯闪烁的那一瞬间&#xff0c;我意识到嵌入式AI的世界远比想象中更触手可及。TinyML正在彻底改变我们与微控制器的…...

RedmiBook Pro15 2023锐龙版Linux调优指南:从内核编译到amd-pstate睿频实战

1. 开箱即用的Linux调优指南 RedmiBook Pro15 2023锐龙版搭载了AMD Ryzen 7 7840HS这颗性能强劲的APU&#xff0c;但在Linux环境下想要充分发挥其潜力&#xff0c;需要一些特殊的调优技巧。我最近刚入手这台笔记本&#xff0c;在Ubuntu 22.04上折腾了一周&#xff0c;总结出这套…...

Mac外接显示器必看:从排列到亮度调节的完整避坑指南

Mac外接显示器完全指南&#xff1a;从基础设置到高阶调校 开篇&#xff1a;为什么你的Mac需要外接显示器&#xff1f; 作为一名长期使用MacBook Pro的深度用户&#xff0c;我清楚地记得第一次连接外接显示器时的困惑与惊喜。那块13英寸的Retina屏幕虽然精致&#xff0c;但在处理…...

极域电子教室破解终极指南:如何用JiYuTrainer重获电脑控制权

极域电子教室破解终极指南&#xff1a;如何用JiYuTrainer重获电脑控制权 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 还在为课堂上的全屏广播而苦恼吗&#xff1f;当老师开启极…...

单细胞注释进阶指南-利用AddModuleScore精准定位细胞亚群

1. 为什么单细胞注释需要进阶方法&#xff1f; 做单细胞分析的朋友们都知道&#xff0c;注释细胞亚群就像是在玩一个高难度的"找不同"游戏。传统方法就像是用放大镜一个个对比特征&#xff0c;而AddModuleScore则像是给了我们一个智能识别器。我在分析NK/T细胞亚群时…...

Debugging ‘subscript out of bounds‘ Errors in R: A Practical Guide

1. 理解"subscript out of bounds"错误的本质 当你第一次在R中看到"subscript out of bounds"这个错误时&#xff0c;可能会感到一头雾水。这个错误直译过来就是"下标越界"&#xff0c;简单来说就是你试图访问的数据位置根本不存在。想象一下你去…...