android NDK开发在本地C/C++源代码中设置断点单步调试详细教程

     原文地址:http://blog.csdn.net/u013149325/article/details/40425837

     最近在学android NDK开发,折腾了一天,终于能够成功在ADT中设置断点单步调试本地C/C++源代码了。网上关于这方面的资料太少了,而且大都不全,并且调试过程中会出现各种各样的问题,真是很磨人,程序猿就得有耐心。把自己的调试过程记录下来,希望对需要的朋友有帮助。

    在看本文之前,请先确保你已经成功编译了一个android NDK工程,并且能够在模拟器或者真机上运行。至于怎么编译NDK工程,包括配置、生成.so文件等等,可以参考我的前一篇博客:http://blog.csdn.net/u013149325/article/details/40375455

    首先,说一下我的开发环境配置:

     win7  64位

     ADT版本: v22.6.2(已经集成了eclipse、CDT,建议大家都用最新版的ADT)

     NDK版本:android-ndk-r10c

     Cygwin:官网下载地址:http://cygwin.com/install.html

     至于Cygwin的安装和环境变量配置,网上很多资料,在此不再赘述。

     注:我试了,必须使用Cygwin执行NDK中的ndk-gdb脚本,才能在ADT中进入C/C++的断点。

     一、在java程序中第一次调用native函数的地方加上断点,如下图:

二、打开jni文件夹下的cpp文件,根据需要设置断点,如下图:


三、设置工程为可调试模式:

     在AndroidManifest的Application中设置Debuggable的值为true,如下图:

注:在C/C++ Build中的Builder Settings下也要设置ndk-build NDK_DEBUG=1

    四、打开Cygwin,用cd命令定位到工程目录下,我的是 cd  /cygdrive/f/练习/androidTest

    然后执行ndk-gdb命令,我的是 $NDK_ROOT/ndk-gdb --verbose --force

    注意:一定要加上--force,否则会报错:Another debug session running,Use --force to kill it

    如果报出 No symbol table is loaded.  Use the "file" command错误,则执行file命令把库加进来,如下:

          file  obj/local/armeabi-v7a/libTest.so

     执行list或者l命令,可以每次显示10行C++源代码。

     五、在ADT中 Debug As->Android Native Application,如果控制台报错找不到库,就点Load那个按钮(由于当时没有截图,反正有3个按钮,你点中间那个),把jni文件夹下的cpp文件加进来。如果控制台显示如下图,你直接忽略错误,点Yes,这个时候如果不出意外,就会跳进C++中设置的断点。

 这个时候,我们就可以看到变量值、堆栈信息和一些汇编指令了。

     注意:如果没有跳进你设置的断点,可能是本地调试还没开始程序就执行完毕了,官网上也是这样解释的:

Note: There is a delay of a few seconds between when the activity is launched and when native debugging starts. If your code is already executed by that point, then you won’t see the breakpoint being hit. So either put a breakpoint in code that is called repetitively, or make sure that you call JNI code after you see that ndk-gdb has connected. 链接:http://tools.android.com/recent/usingthendkplugin

你可以在java代码中恰当位置延迟几秒钟,这样就能保证程序执行到断点处本地调试程序已经开启。

能调试成功不容易啊,各位朋友如果遇到了问题,可以在博客下给我留言,我尽力帮忙解决。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值