[1].终端目录设置到: proj.android
[2].make文件的编译选项加上: -g -gstabs+
[3].执行编译脚本: sh ./build_native.sh NDK_DEBUG=1
[4].将生产的gdbserver push到手机上,找个能写的目录: adb push ./libs/armeabi/gdbserver data/data/tmp
[5].启动app
[6].终端: adb shell
[7].终端: su
[8].终端: cd data/data/tmp (到存放gdbserver的目录)
[9].获得app进程号: ps com.fun.funm
[10].终端: ./gdbserver :1080[端口] —attach 6280[进程号]
[11].切换到proj.android终端
[12].终端: adb forward tcp:1080 tcp:1080
[13].启动: ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gdb
[14].终端: target remote: 1080
[15].打开 ./lib/armeabi/gdb.setup, 将里面的两个命令贴入终端执行
 
1.配置环境变量,.bash_profile文件
## andorid
export ANDROID_HOME=/Volumes/work/program
export ANDROID_SDK=${ANDROID_HOME}/adt-bundle-mac-x86_64-20140702/sdk
export ANDROID_NDK=${ANDROID_HOME}/android-ndk-r10
export NDK=${ANDROID_NDK}
export PATH=${PATH}:${ANDROID_SDK}/tools
export PATH=${PATH}:${ANDROID_SDK}/platform-tools
export PATH=${PATH}:${ANDROID_NDK}/platforms
export PATH=${PATH}:${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin ## ant
export ANT_HOME=${ANDROID_HOME}/apache-ant-1.9.6
export PATH=${PATH}:${ANT_HOME}/bin ## python path
export PYTHONHOME=/usr/lib/python2.7
export PYTHONPATH=.:$PYTHONHOME:$PYTHONHOME/site-packages
export PATH=${PATH}:$PYTHONHOME:$PYTHONPATH ## custom path
export WORKSPACE=/Volumes/work/projecj
export FUNM_PROJ_ROOT=/Volumes/work/project/v3.1.0.1-20160222/funm/proj.android

2.android版本设置,local.properties, project.properties, ant.properties

设置完执行创建ant编译需要的文件build.xml:

android update project -t android-20 -p .

3.mk文件配置:

Application.mk文件
NDK_TOOLCHAIN_VERSION := 4.8
APP_ABI := armeabi
Android.mk文件
优选选项 -o0

4.native代码文件编译

## build debug
$NDK_ROOT/ndk-build NDK_DEBUG=1

5.ant 项目目录下打包apk:

ant debug;ant release;

6.adb 安装apk:

adb install Funm-debug.apk

7.启动apk,开启gdb调试

## gdb attach
$NDK_ROOT/ndk-gdb

然后就可以开始设置断点调试了

继续:c(continue)
设置断点:break test.cpp:100
查看断点:info breakpoints
删除断点:clear / clear test.cpp:100 / delete 1 2 3 
 
需要工具:
ndk编译及调试:android-ndk-r10
ant打包:apache-ant-1.9.6(适合有专门编译机时使用此方式打包)
eclipse打包:adt-bundle-mac-x86_64-20140702(集成版,本地调试用eclipse即可)
gdb调试不用每次重新打包,只要打包出apk,启动后设置断点即可。

Android gdb 调试的更多相关文章

  1. Eclipse+CDT+GDB调试android NDK程序(转)

    Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for ja ...

  2. 使用GDB调试Android NDK native(C/C++)程序

    使用GDB调试Android NDK native(C/C++)程序 先说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口 ...

  3. 使用GDB调试Android NDK native(C/C++)程序-转

    最 近写了些需要跨平台兼容的C++库,Android是其中需要兼容的平台之一.区别于Windows,Mac中功能强大的IDE环境,官方并没有为 Android ndk提供太多的支持.因此,尝试了下通过 ...

  4. 使用GDB调试Android Native 层代码

    --------------步骤:0. adb root0. adb shell0. ps | grep browser1. gdbserver :5039 --attach pid2. adb fo ...

  5. 使用WIFI连接android进行调试和adb操作

    本人需要wifi连接android进行调试的原因主要是要经常用到IDA pro进行调试,但手头有的IDA Pro版本只是windows的,开发可能更多用Mac OS X了,来回拔插.调试很不方便,所以 ...

  6. GDB调试:Linux开发人员必备技能

    开篇词:Linux C/C++ 开发人员要熟练掌握 GDB 调试 大家好,我是范蠡,目前在某知名互联网旅游公司基础框架业务部技术专家组任开发经理一职. 本系列课程的主题是 Linux 后台开发的 C/ ...

  7. GDB调试命令小结

    1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...

  8. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  9. gdb调试器的使用

    想要使用gdb调试程序的话,首先需要gcc -g main.c -o test 然后运行gdb test对程序进行调试 l (小写的l,是list的首字母),用以列出程序 回车    是运行上一个命令 ...

随机推荐

  1. C#开发可以可视化操作的windows服务

    使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一 直执行我们开发的某些程序的时候.我经常看到许多人开发的win ...

  2. Python的下载与安装

    linux系统由于自身的需要,自带了Python,而Windows的系统就没有自带Python.本篇Blog介绍在win8.1下,安装Pathon需要注意的问题,包括常见的0x80240017.250 ...

  3. Window对象

    Window对象:         Window 对象表示浏览器中打开的窗口,如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框 ...

  4. C/C++构建系统 GNU autotool

    我们在网上经常可以看到c/c++开源的项目,其中很多都是使用GNU的构建系统进行配置和编译的,如果按照规范构造这些的步骤,有一定的门槛和复杂度,下文把关于auotools系列的工具和概要的流程简要汇总 ...

  5. ContentProvider实现流程

    个人记录 public class DataBaseContentProvider extends ContentProvider { private SQLiteOpenHelper mSQLite ...

  6. mysql 时间函数转换

    1 NOW() //当前时间 2 SYSDATE() //当前时间 3 CURRENT_TIMESTAMP 4 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的 ...

  7. Android四大组件之Activity一(组件的概念、Intent、监听)

    前言知识补充:  什么是组件?   1.它的类必须实现特定接口或继承特定类   2.需要在配置文件中配置其全类名   3.它的对象不是通过new来创建的, 而是系统自动创建的   4.它的对象具有一定 ...

  8. 【代码笔记】iOS-判断字符串是否为空

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  9. OC 多态

    OC 多态 多态的概念 没有继承,就没有多态 不同类的对象能够定义相同名称的方法 当父类对象的指针或引用指向子类对象时,会进行动态监测,调用真实的方法 C++只有虚函数才能实现多态,OC中所有方法都可 ...

  10. Safari 快捷键

    标签和网页导航快捷键 8 个 切换到下一个标签页 – Control+Tab 切换到上一个标签页 – Control+Shift+Tab 向下滚动一屏 – 空格 向上滚动一屏 – Shift+空格 焦 ...