GDB+gdbserver 远程调试android native code

本文介绍如何使用GDB进行Android平台上的C/C++代码远程调试,包括启动gdbserver、端口映射及使用gdb客户端进行调试的具体步骤。
AI助手已提取文章相关产品:

一、什么是gdb?

它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C、C++代码。
它主要可以做4件事情:

1、随心所欲地启动你的程序。
2、设置断点,程序执行到断点处会停住。(断点可以是表达式)
3、程序被停住后,可以查看此时程序中发生的事。
4、动态改变程序的执行环境一。
我们需要使用gdbserver依附到我们要调试的进程上,gdb通过adbd和手机上的gdbserver进行socket通信。

二、远程调试实战

1、在手机上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是手机上的端口)
$ adb shell
# ps #查看要调试进程的PID
# gdbserver :1234 --attach 96 #:1234是端口号,96 是进程ID

2、使用adb做端口映射,将pc机上的端口定向到手机上gdbserver监听的端口
$ adb forward tcp:1234 tcp:1234 #端口映射,将pc机的1234端口映射到手机的1234端口

3、启动gdb向指定的pc机端口发信息开始调试
android_project_root/prebuilt/linux-x86/arm-eabi-4.4.3/$ ./arm-eabi-gdb #使用项目下的gdb客户端去连接gdbserver,gdb的类型要选择针对手机平台的,版本要和gdbserver一致。
<gdb> target remote :1234 #连接本地的:1234端口,此端口已经和手机的1234端口做好映射。
<gdb> file xxx/out/target/xx...xx/symbols/system/bin/mediaserver #加载可执行程序,注意选择symbols下的,如果调试的进程是app进程,这里选择app_process。
<gdb> set solib-search-path xxx/out/target/xx...xx/symbols/system/lib #加载所有的动态连接库,注意选择symbols下的。
<gdb> bt #查看调用堆栈
<gdb> list xxx/xxx..xxx/xxx.cpp #查看相关文件
<gdb> b 100 #在文件的第100行打断点
<gdb> c #继续执行程序

您可能感兴趣的与本文相关内容

您想在 ARM 架构的 Ubuntu 系统上使用 VSCode 调试 C/C++ 程序,可以通过以下步骤实现: 1. 安装 VSCode 您可以从官方网站 https://code.visualstudio.com/ 下载并安装适用于 ARM 架构的 VSCode。 2. 在 Ubuntu 系统上安装 gdbgdbserver 打开终端,运行以下命令: ``` sudo apt-get update sudo apt-get install gdb gdbserver ``` 3. 在 VSCode 中安装插件 打开 VSCode,按下 `Ctrl+Shift+X` 进入扩展页面,搜索并安装 `C/C++` 和 `Native Debug` 插件。 4. 配置 VSCode 在 VSCode 中打开您要调试的 C/C++ 项目文件夹,然后按下 `Ctrl+Shift+P` 打开命令面板,输入 `C/C++: Edit Configurations (JSON)` 并选择对应的选项。在打开的 `c_cpp_properties.json` 文件中添加以下配置: ``` "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "gnu11", "cppStandard": "gnu++14", "intelliSenseMode": "gcc-arm", "browse": { "path": [ "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 4 ``` 其中,`compilerPath` 是您的编译器路径,可以根据您的实际情况进行更改。 5. 启动 gdbserver 在终端中进入您的程序所在目录,然后运行以下命令: ``` gdbserver :1234 ./your_program ``` 其中,`:1234` 是 gdbserver 的端口号,`./your_program` 是您要调试的程序名称。 6. 调试程序 回到 VSCode,按下 `F5` 启动调试。在弹出的配置面板中选择 `gdb`,然后在 `launch.json` 文件中添加以下配置: ``` "configurations": [ { "name": "C++ Launch (GDB)", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/your_program", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "miDebuggerServerAddress": "localhost:1234", "preLaunchTask": "build" } ] ``` 其中,`program` 是您要调试的程序路径,`miDebuggerPath` 是 gdb 的路径,`miDebuggerServerAddress` 是 gdbserver 的地址和端口号。 最后,按下 `F5` 启动调试,即可在 VSCode 中进行 C/C++ 程序的调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值