在经历了无数纠结后,决定写下这篇文章,让后面的开发人员少走弯路~
博文中的图片来自原文,可能会与我的开发环境有少许不同,但是整体步骤是对的。本人在以下环境中测试通过:
系统:Ubuntu 11.04
NDK版本:r6
eclipse版本:3.7
参考原文:
http://www.eclipse.org/sequoyah/documentation/native_debug.php
首先下面5步设置eclipse
第1步:
在AndroidManifest.xml文件中application项中加入android:debuggable="true",你也可以在eclipse里的可视化中设置,如下图。
第2步:设置你的C/C++调试选项
在Main的选项卡中,在C/C++ Application里面选择app_process作为调试对象(app_process文件会在你运行ndk-gdb时候生成)!而不是你编译出来的*.so文件!这个文件会在 你的项目路径/obj/local/armeabi/app_process
还有记得选择Disable auto build 配置如下图
接下来点击图片中红色方框特别标志的地方,设置启动调试的进一步参数
第3步:选择调试启动方式
选择Standard Create Process 然后确定,如图
第4步:
在Debugger的选项卡中设置debugger模式为gdbserver,而Stop on start at就填你希望当调试开始时候的断点函数名(注意:这个函数名是C/C++的函数名称,即使你没有打上断点当运行到这个函数时会自动暂停)
在Debugger Option栏目框里的Main选项卡的GDB Debugger选择NDK的gdb,这个文件在 NDK目录/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin 里面,可能包含window平台等,请根据自己的开发机器和目标平台做正确的选择!!!接下来,需要修改一些东西,当你编译好你的工程后会生成一个gdb.setup的gdb配置文件,例如 你的工程目录/obj/local/armeabi/gdb.setup,先将该文件做个拷贝,命名为gdb2.setup,然后用打开这个文件将最后一行 target remote :5039删掉,因为接下来我们会在eclipse里面设置,因此这一行是多余的,如果不删掉的话会出错!然后就将改好的文件设置为GDB Command file,整体如下图
第5步:
在Debugger Option栏目框里的Connection选项卡设置连接类型Type为TCP,端口Port number为5039,如图
最后修改ndk-gdb这个文件,该文件位于你的NDK目录下,先将该文件做个拷贝,命名为ndk-gdb2,然后打开,将最后一行 $GDBCLIENT -x `native_path $GDBSETUP` 删掉,这一行的功能是启动控制台的gdb我们已经在eclipse里启动了,所以不需要这行!
具体调试步骤:
1.用eclipse启动android的java调试在你自己的Activity类中的onCreate方法中加一个断点,避免程序一闪而过你还没来得及启动C/C++部分的调试。
2.在你的工程目录下运行刚才修改好的ndk-gdb2,如果你需要一些信息可以在后面加上--verbose参数。
3.启动eclipse的C/C++调试
启动成功后如下图(这张图是我自己的,呵呵...)
一些比较弱智的个人心得:
android的模拟器是可以正常使用超级用户的权限的,当你是用真机设备调试的时候请确保你的真机设备已经root否则会出现一些权限的错误,甚至导致莫名奇妙的问题...我就被这些问题纠结了几天....
博文中的图片来自原文,可能会与我的开发环境有少许不同,但是整体步骤是对的。本人在以下环境中测试通过:
系统:Ubuntu 11.04
NDK版本:r6
eclipse版本:3.7
参考原文:
http://www.eclipse.org/sequoyah/documentation/native_debug.php
首先下面5步设置eclipse
第1步:
在AndroidManifest.xml文件中application项中加入android:debuggable="true",你也可以在eclipse里的可视化中设置,如下图。
第2步:设置你的C/C++调试选项
在Main的选项卡中,在C/C++ Application里面选择app_process作为调试对象(app_process文件会在你运行ndk-gdb时候生成)!而不是你编译出来的*.so文件!这个文件会在 你的项目路径/obj/local/armeabi/app_process
还有记得选择Disable auto build 配置如下图
接下来点击图片中红色方框特别标志的地方,设置启动调试的进一步参数
第3步:选择调试启动方式
选择Standard Create Process 然后确定,如图
第4步:
在Debugger的选项卡中设置debugger模式为gdbserver,而Stop on start at就填你希望当调试开始时候的断点函数名(注意:这个函数名是C/C++的函数名称,即使你没有打上断点当运行到这个函数时会自动暂停)
在Debugger Option栏目框里的Main选项卡的GDB Debugger选择NDK的gdb,这个文件在
第5步:
在Debugger Option栏目框里的Connection选项卡设置连接类型Type为TCP,端口Port number为5039,如图
最后修改ndk-gdb这个文件,该文件位于你的NDK目录下,先将该文件做个拷贝,命名为ndk-gdb2,然后打开,将最后一行
具体调试步骤:
1.用eclipse启动android的java调试在你自己的Activity类中的onCreate方法中加一个断点,避免程序一闪而过你还没来得及启动C/C++部分的调试。
2.在你的工程目录下运行刚才修改好的ndk-gdb2,如果你需要一些信息可以在后面加上--verbose参数。
3.启动eclipse的C/C++调试
启动成功后如下图(这张图是我自己的,呵呵...)
一些比较弱智的个人心得:
android的模拟器是可以正常使用超级用户的权限的,当你是用真机设备调试的时候请确保你的真机设备已经root否则会出现一些权限的错误,甚至导致莫名奇妙的问题...我就被这些问题纠结了几天....