生成debug版程序

方法一:

使用ndk-build编译时,加上如下参数NDK_DEBUG=1,之后生成so文件之外,还会生成gdbobserver,gdb.setup调式文件

方法二:

修改AndroidManifest.xml文件,增加debuggable属性为true

<application android:debuggable="true"  ...

Eclipse报错则在错误信息上点右键 Quickly fix 忽略掉错误即可

编译之后会生成和调试相关的文件如下:

libs目录下的gdbserver需要拷贝到虚拟机

gdb.setup是设置和符号相关的路径

obj下面的Hello是符号相关的路径

方法三:

在application.mk中加入

APP_OPTIM := debug

NDK_DEBUG = 1

只会生成调试的符号文件,对应版本的gdbsever还需要自己从ndk中拿出来

启动调试

我们以x86的模拟器作为调试目标,首先编译x86版本的可执行文件

在工程目录下新建一个makefile文件

编写调试脚本如下:

MODALE_NAME := Hello

# x86 path

X86_TOOLS_PATH :=E:\Android\android-ndk-r10b\toolchains\x86-4.6\prebuilt\windows-x86_64\bin

X86_GDB_PATH := $(X86_TOOLS_PATH)\i686-linux-android-gdb.exe

X86_GDB_SERVER := E:\Android\android-ndk-r10b\prebuilt\android-x86\gdbserver\gdbserver

run_x86:

adb push .\libs\x86\$(MODALE_NAME) /data/local/tmp

adb shell chmod 755 /data/local/tmp/$(MODALE_NAME)

adb shell /data/local/tmp/$(MODALE_NAME)

debug_x86:

adb forward tcp:12345 tcp:12345

adb push $(X86_GDB_SERVER) /data/local/tmp

adb shell chmod 777 /data/local/tmp/gdbserver

adb push .\obj\local\x86\$(MODALE_NAME) /data/local/tmp

adb shell chmod 777 /data/local/tmp/$(MODALE_NAME)

adb shell /data/local/tmp/gdbserver :12345 /data/local/tmp/$(MODALE_NAME)

client_x86:

$(X86_GDB_PATH) .\obj\local\x86\$(MODALE_NAME)

# 1. target remote localhost:12345

# 2. gdb.setup

debug子过程:

大致的流程就是把gdbserver和debug版本程序拷贝到手机或者模拟器里面

给予可执行权限,然后用手机里面的gdbserver启动程序 等待PC上的gdb连接

client子过程:

就是连接手机中的gdb开始调试

然后执行make debug 服务端即开始等待客户端调试器的连接

出现Listen就对了

在换一个shell 输入make client

进入gdb界面后输入target remote localhost:12345

报错:找不到动态链接库,这是没有设置gdb.setup的原因

解决方案:

将libs/x86目录下的gdb.setup中的2行命令放到gdb(client)中执行就好

如下图设置就好:

然后就可以开始调试了

注意:

1.如果模拟器是基于x86架构的 那么gdbserver也必须使用x86的

2.如果你的工程的ABI是armeabi-v7a, 那么libs目录下的gdbserver也是armeabi-v7a的

GDB简易使用

gdb命令比较多,简单的介绍几个常用的命令:

list(l) 用来查看代码

break line_num(b)  用于对指定的代码行下断点

info breakpoint 用于查看断点信息

run命令用于执行程序

next (n) 单步步过

step (s) 单步步入

continue (c) 执行到下一个断点

print 查看变量的值

backtrace 函数栈信息

clear 删除暂停处的断点

delete 删除一个断点

info func 显示函数信息

info local 显示当前函数的局部变量信息

q命令退出调试

转载于:https://www.cnblogs.com/bingghost/p/5731020.html

ndk学习6: 使用gdb调试ndk程序一相关推荐

  1. [Golang]搭建gdb调试go程序

    搭建gdb调试go程序 前言 gdb安装 更新brew 查看是否存在gdb镜像 安装gdb go build编译 gdb执行 gdb命令 gdb调试 问题整理 参考 前言 学会使用gdb进行golan ...

  2. 使用 GDB 调试多进程程序

    使用 GDB 调试多进程程序 来源 https://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html GDB 是 linux 系统上常 ...

  3. 用 GDB 调试Linux程序及有用技巧

    用 GDB 调试Linux程序及有用技巧(转) armlinux   2008-06-19 10:48   阅读91   评论0 字号: 大大  中中  小小 GNU的调试器称为gdb,该程序是一个交 ...

  4. GDB调试多线程程序

    (1)gdb ./program运行程序 (2)程序挂掉 (3)info thread查看程序挂掉瞬间所有运行线程执行到的位置: 此时,可以粗略看到哪些线程执行出现了问题(线程号前面带*的表示当前线程 ...

  5. android程序启动之后 eclipse ndk-gdb 连接,Eclipse+CDT+GDB调试android-NDK程序(补足六个汉字).docx...

    Eclipse+CDT+GDB调试android NDK程序 Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 1 ...

  6. 在Linux中如何使用gdb调试C程序

    无论多么有经验的程序员,开发的任何软件都不可能完全没有 bug.因此,排查及修复 bug 成为软件开发周期中最重要的任务之一.有许多办法可以排查 bug(测试.代码自审等等),但是还有一些专用软件(称 ...

  7. 用gdb调试mpi程序的一些心得

    Linux下MPI (Message Passage Interface) 的程序不太好调试,在windows下vs2005以上的IDE有集成的简便MPI调试工具,没有用过,有兴趣的可以试验一下.下面 ...

  8. 用 gdb 调试 GCC 程序

    用 gdb 调试 GCC 程序       Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构 ...

  9. 【转】gdb调试多进程程序

    GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大.对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统: 进程 Proc2 是 Proc1 的子 ...

最新文章

  1. mysql数据库会同时执行sql吗_mysql 一次执行多条sql语句
  2. sendmail(一)
  3. MATLAB找不到遗传算法工具箱,用不了gatool命令的解决方案
  4. 中原银行签约神策数据 数据驱动构建智能服务体系
  5. mysql 线程_MySQL服务器线程数的查看方法详解
  6. MFC标签页控件的使用
  7. python前后两个下划线_Python中一个下划线_和两个下划线__的区别
  8. css实现图片虚化_什么? CSS 阴影竟然还有这种骚操作 ?
  9. mysql-数据备份操作
  10. 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造
  11. ie浏览器和谷歌浏览器控件不同_win7系统怎么重置ie浏览器 重置ie浏览器操作方法【详解】...
  12. Unity3D脚本语言的类型系统
  13. Vue + Canvas 实现头像截图上传功能
  14. 快速清理C盘的四个方法
  15. 20205月6日服务器维护,国服12月6日维护公告:各大区服务器分时段维护
  16. AR小项目的制作过程(一)
  17. OpenCV/kornia/Pillow/Halcon/NI Vision/MIL/*计算机视觉资料汇总
  18. 最小生成树算法-克鲁斯卡尔和普利姆
  19. 三维扫描三维建模在数字博物馆中的应用
  20. 1007. Maximum Subsequence Sum (25)-PAT甲级真题(最大连续子序列和、动态规划dp)

热门文章

  1. TigerDLNA for ios 集成Tlplayer
  2. Java中内存中的Heap、Stack与程序运行的关系
  3. GIS二次开发之初探
  4. JavaScript 高级——详谈面向对象
  5. 小程序 --- 点击放大功能、获取位置信息、文字样式省略、页面跳转(navigateTo)
  6. node --- 使用koa-router,让后端模块化
  7. canvas--初级
  8. 老男孩linux运维50期
  9. Java List 分页
  10. 利用数据的商业智能分析工具