gdb与adb相关命令总结

本文档详细介绍了如何利用gdb与adb进行设备调试,包括设备连接、权限设置、文件传输及进程管理等关键步骤,并提供了具体的命令示例。

在使用gdb与adb时需要注意一些类似于权限的问题,比如设备需要root,设备root后命令行下需要

切换用户到root用户下操作,又比如相关的目录或文件是否有足够的权限等等,总结为如下:

(以下示例所给的部分权限可能过大,因为是实验,所以命令仅供参考)

adb devices        显示已连接的设备
adb shell        --》进入shell环境
su        ->切换至root用户
adb push 本地目录文件 远程主机目录文件    -》上传文件或目录到远程主机
adb pull 设备目录文件 本地目录文件    -》从目标设备下载文件到本地
chmod 777 /system    修改gdb上传目录的权限
chmod 777 /system/bin    修改gdb上传目录的权限
adb push D:\gdb /system/bin    上传gdb到/system/bin目录
adb push D:\gdbserver /system/bin    上传gdbserver到/system/bin目录
adb push D:\myfile.pdf /sdcard/   发送文件到设备SD卡:
adb pull /sdcard/myfile.pdf D:\  从设备SD卡获取文件:
chmod
777 gdb 修改gdb和gdbserver的权限为可执行 chmod 777 gdbserver ps | grep com.***.*** 查找程序的进程 ls /proc/*****/task/ (*****为上一条命令后出现的第一个进程数字组合) cd /system/bin gdb上传到/system/bin/目录下的,所以执行gdb命令式先跳转至该目录下 ./gdb -pid 20553 gcore

 

### 如何在VSCode中使用ADBGDB进行调试 #### 配置环境 为了能够在Visual Studio Code (VSCode) 中利用Android Debug Bridge (ADB) 和GNU Debugger (GDB) 对设备上的原生代码执行调试操作,需先配置好开发环境。这通常涉及到安装必要的工具链以及设置编译选项来确保生成带有调试信息的目标文件。 对于基于ARM架构的安卓应用或系统模块,在构建过程中可以通过指定`ARCH=arm64`并定义交叉编译器前缀如`CROSS_COMPILE=aarch64-linux-android-`来进行适配[^3]: ```bash $ make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- ``` 此命令会启动多线程编译过程,并针对特定硬件平台创建可被GDB识别和支持调试特性的二进制文件。 #### 连接目标设备 通过ADB连接到运行中的模拟器实例或其他物理测试装置是实现远程调试的前提条件之一。可以借助脚本批量终止所有正在使用的emulator端口以准备新的调试会话[^4]: ```bash #!/bin/bash for ((PORT=5554; PORT<=5584; PORT+=2)); do echo killing emulator-$PORT... adb -s emulator-$PORT emu kill done ``` 上述脚本展示了如何遍历一系列可能存在的虚拟机监听地址,并发送关闭指令给对应的服务进程。 #### 设置VSCode调试配置 一旦完成了前期准备工作,则可以在VSCode内部建立专门用于管理本地远端程序交互逻辑的工作区.json文件或者直接编辑launch.json添加如下所示的任务描述项[^1]: ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/path/to/binary", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": true, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "miDebuggerPath":"/usr/bin/gdb", "preLaunchTask": "build-debug", "logging": {"trace":true,"traceResponse":true}, "pipeTransport": { "pipeProgram": "/path/to/adb", "pipeArgs": ["-s","<device_id>","shell"], "debuggerPath":"/data/local/tmp/gdbserver" }, "sourceFileMap":{ "/proc/self/cwd":"/home/user/project/src" } } ] } ``` 这段JSON片段说明了一个完整的调试方案,其中包含了指向待测应用程序路径、初始化参数列表以及其他辅助属性;特别值得注意的是`pipeTransport`部分指定了怎样经由ADB桥接到实际执行上下文中去加载gdbserver服务端组件完成整个调试点映射关系的确立工作。 #### 开始调试流程 当一切就绪之后,只需点击IDE界面上方绿色播放按钮即可触发预设好的自动化部署动作序列——即从源码重新编译直至最终附着于选定进程中开启单步跟踪模式下的探索之旅了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值