生成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 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的原因

 

 

解决方案:

行命令放到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命令退出调试

 

 

 

ndk学习6: 使用gdb调试ndk程序一的更多相关文章

  1. Gdb调试多进程程序

    Gdb调试多进程程序 程序经常使用fork/exec创建多进程程序.多进程程序有自己独立的地址空间,这是多进程调试首要注意的地方.Gdb功能强大,对调试多线程提供很多支持. 方法1:调试多进程最土的办 ...

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

    使用 GDB 调试多进程程序 GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较. 3 评论 田 强 (tianq@cn.ibm.co ...

  3. 使用gdb调试多线程程序总结

    转:使用gdb调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程 ...

  4. Debugging with GDB 用GDB调试多线程程序

    Debugging with GDB http://www.delorie.com/gnu/docs/gdb/gdb_25.html GDB调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为 ...

  5. 【疑难杂症】gdb调试多线程程序报错:interrupted system call

    一. cmake生成可调试版本的程序,该内容参考自https://www.linuxidc.com/Linux/2014-03/98622.htm 具体内容如下: 1, 使用CMAKE编译确实很方便. ...

  6. 用GDB 调试Java程序

      陈皓 http://blog.csdn.net/haoel 背景 想要使用GDB调试程序,就需要用GNU的编译器编译程序.如:用GCC编译的C/C++的程序,才能用GDB调试.对于Java程序也是 ...

  7. 用 gdb 调试 GCC 程序【转】

    用 GDB 调试程序 原著:Rick McMullin 用 gdb 调试 GCC 程序 转自:http://blog.csdn.net/bonnshore/article/details/795542 ...

  8. 【php】使用gdb调试php程序

    1.简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.同时GDB也具有例如d ...

  9. gdb调试多线程程序总结

    阿里核心系统团队博客 http://csrd.aliapp.com/?tag=pstack Linux下多线程查看工具(pstree.ps.pstack) http://www.cnblogs.com ...

随机推荐

  1. Winform添加Label

    Info from : http://www.csharpwin.com/csharpspace/6253r7952.shtml 本例子主要是介绍如何在 C#开发WinForm中加入一个组件,如果你想 ...

  2. Entity Framework - Using Transactions or SaveChanges(false) and AcceptAllChanges()?

    LINK With the Entity Framework most of the time SaveChanges() is sufficient. This creates a transact ...

  3. Page传回页面的值问题

  4. Redis实现简单的消息队列

    1.问:什么是消息队列?  答:是一个消息的链表,是一个异步处理的数据处理引擎. 2.问:有什么好处? 答:不仅能够提高系统的负荷,还能够改善因网络阻塞导致的数据缺失. 3.问:用途有哪些? 答:邮件 ...

  5. CF451D Count Good Substrings (DP)

    Codeforces Round #258 (Div. 2) Count Good Substrings D. Count Good Substrings time limit per test 2 ...

  6. oracle中时间运算

    Oracle两个函数相减,默认得到的是天数,按日期格式,精准到响应的精度,如用sysdate(2015/12/7 10:17:52),时间差精确到秒. 在此基础上,oracle两个时间相减默认天数*2 ...

  7. HTML5音乐播放器(最新升级改造加强版)

    最近么,单位里面么老不顺心的,公司一直催要程序员要PHP,然后本宅好不容易推荐了一个,我日嘞,最后待遇变成1.3,吾师最后也同意1.3W,然后还说要考虑... 尼玛,4年多5年不到一点的工作经验,前端 ...

  8. html5手机常见问题与工具分享

    mobileTech A useful tools or tips list for mobile web application developing 这个项目收集移动端开发所需要的一些资源与小技巧 ...

  9. [整理]Android开发(二)-Weather App

    private class WeatherData{ private String _weatherDescription; private Integer _currentTemperature; ...

  10. R-处理数据对象的实用函数