文档章节

Android native debug: 手动使用gdbserver远程调试C代码

Q_J
 Q_J
发布于 2015/06/19 14:44
字数 617
阅读 100
收藏 1
点赞 0
评论 0

一般用java做一个Android app,里面夹杂着jni/*.c 所编译出来的lib,是可以通过gdb来调试的,也许大多数人都在按照网上各种帮助在使用,原理是比较古怪的:app里被塞进去一个gdbserver程序!安装后,会在该app的data目录下出现gdbserver,然后eclipse活着什么别的工具偷偷的启动gdbserver,让他调试改app进程,哦,是通过侦听一个socket,以便让PC端远程发送命令。关于这个网上有不少原理叙述。

但是有时候,就是开发一个和java无关的C程序放在android里运行,要想调试,这么简单的需求,就不想被那些乱七八糟的束缚了,方法基本参照gdbserver标准方法,例如这个。 只是稍微结合一下Android和NDK。

大致如下:

在ndk里找到gdbserver, 例如

find /Applications/android-ndk -type f -name '*gdbserver*' |grep arm

结果

 

/Applications/android-ndk/prebuilt/android-arm/gdbserver/gdbserver
/Applications/android-ndk/prebuilt/android-arm64/gdbserver/gdbserver

Android 5.0之前是第1行,之后是第2行。

把找到的gdbserver传到Android上, 例如

adb push /Applications/android-ndk/prebuilt/android-arm/gdbserver/gdbserver /data/local/tmp/

启动Android里的gdbserver来打开目标C程序,例如a.out

adb shell /data/local/tmp/gdbserver localhost:9999 /data/local/tmp/a.out 目标程序的命令行参数...

结果

Process /data/local/tmp/a.out created; pid = 16236
Listening on port 9999

把本地的9999端口映射到Android上以便以后的操作

adb forward tcp:9999 tcp:9999

至于gdb client,也是在NDK里找出来

find /Applications/android-ndk -type f -name '*gdb' |grep arm

结果

/Applications/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb
/Applications/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb
/Applications/android-ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb

就选最后一行好了。

启动gdb client(当然在PC上)

/Applications/android-ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb ./a.out
target remote :9999

结果就不啰嗦了,就是个(gdb)提示符,等你输入断点命令(b)和继续命令(cont)还有什么显示代码命令(list)等等,直接在网上找找还快些。

至于如何简单的编译出Android下的C程序,可以参照

拒绝ndk-build (Android Native Development Kit)

 

© 著作权归作者所有

共有 人打赏支持
Q_J

Q_J

粉丝 12
博文 66
码字总数 54682
作品 0
日本
欠揍的ffmpeg,调试android里的ffmpeg (1)

目标问题 对于jpeg的编码为什么不用libjpeg而是用mpeg(没错就是这电影老古董格式)里代码? 其实发现就连wmv等等一些平时用不着的破东西,都是和mpeg老古董共用一套代码。jpeg和mpeg没什么关系...

Q_J ⋅ 2015/06/24 ⋅ 0

从零开始手敲次世代游戏引擎(Android特别篇)-3

在文章从零开始手敲次世代游戏引擎(Android特别篇)-2当中我们完成了执行环境的部署,并打通了开发环境和执行环境。但是到目前为止我们只是完成了C/C++部分的交叉编译,并没有实现Android应...

陈文礼 ⋅ 01/08 ⋅ 1

React Native 调试问题

使用React Native Tool在VSCODE中进行断点调试时点击DEBUG Android,弹出 Could not debug. Unknown error: not all success patterns were matched. It means that "react-native run-andro......

bill1987610 ⋅ 05/31 ⋅ 0

React Native 调试问题

使用React Native Tool在VSCODE中进行断点调试时点击DEBUG Android,弹出 Could not debug. Unknown error: not all success patterns were matched. It means that "react-native run-andro......

bill1987610 ⋅ 05/31 ⋅ 0

Android so调试-你需要的从零开始

Android so调试-你需要的从零开始 前言 最新公司项目需要开发一个人脸融合的demo,C++部分已经由另外团队开发完成,需要跟Android进行对接。但是在so库编译完成之后,发现闪退,logcat看不到...

ice_Anson ⋅ 2016/11/28 ⋅ 0

ndk-gdb使用简介

文档摘自android-ndk-r9c-linux-x8664.tar.bz2中的docs/ndk-gdb.html 下面是渣渣版翻译,禁止围观,禁止吐槽 'ndk-gdb' and 'ndk-gdb-py' Overview IMPORTANT: IF YOU ARE DEBUGGING THREAD......

不写可以么 ⋅ 2014/01/18 ⋅ 0

React Native在Android当中实践(五)——常见问题

React Native在Android当中实践(一)——背景介绍 React Native在Android当中实践(二)——搭建开发环境 React Native在Android当中实践(三)——集成到Android项目当中 React Native在A...

YangZC ⋅ 05/28 ⋅ 0

React Native基础&入门教程:调试React Native应用的一小步

React Native(以下简称RN)为传统前端开发者打开了一扇新的大门。其中,使用浏览器的调试工具去Debug移动端的代码,无疑是最吸引开发人员的特性之一。 试想一下,当你在手机屏幕按下一个按钮,...

葡萄城控件技术团队 ⋅ 06/04 ⋅ 0

使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和调试(一台电脑有桌面系统,一台电脑无桌面系统)

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/62423830 序言 考虑到程序员在无桌面Linux的环境下编写C/C++程序,如果使用原生的Vim编辑...

libaineu2004 ⋅ 2017/03/16 ⋅ 0

gdb调试总结

一、安卓机器中本地使用gdb调试 二、双机(安卓上安装gdbserver,PC端运行gdbclient) 1、编译native代码时使用NDK_DEBUG参数,编译完成后会在libs/armeabi-v7/下多生成两个文件gdb.setup和g...

fallrain ⋅ 2016/03/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从零开始搭建Risc-v Rocket环境---(1)

为了搭建Rocke环境,我买了一个2T的移动硬盘,安装的ubuntu-16.04 LTS版。没有java8,gcc是5.4.0 joe@joe-Inspiron-7460:~$ java -version程序 'java' 已包含在下列软件包中: * default-...

whoisliang ⋅ 21分钟前 ⋅ 0

大数据学习路线(自己制定的,从零开始学习大数据)

大数据已经火了很久了,一直想了解它学习它结果没时间,过年后终于有时间了,了解了一些资料,结合我自己的情况,初步整理了一个学习路线,有问题的希望大神指点。 学习路线 Linux(shell,高并...

董黎明 ⋅ 27分钟前 ⋅ 0

systemd编写服务

一、开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。 如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。 ...

勇敢的飞石 ⋅ 29分钟前 ⋅ 0

mysql 基本sql

CREATE TABLE `BBB_build_info` ( `community_id` varchar(50) NOT NULL COMMENT '小区ID', `layer` int(11) NOT NULL COMMENT '地址层数', `id` int(11) NOT NULL COMMENT '地址id', `full_......

zaolonglei ⋅ 38分钟前 ⋅ 0

安装chrome的vue插件

参看文档:https://www.cnblogs.com/yulingjia/p/7904138.html

xiaoge2016 ⋅ 41分钟前 ⋅ 0

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 今天 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 今天 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 今天 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 今天 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部