Android NDK中的C++调试踩坑标记

RT,

Android NDK中的C++调试,

GDB调试比较麻烦,在ADT Eclipse中:

1.配置好NDK给工程加上Native Support

2.编译中加上NDK_DEBUG=1

3.然后改造下mk文件:

#APP_DEBUG will be set by android-ndk if NDK_DEBUG=1 is set.
ifdef APP_DEBUG
   ifeq ($(APP_DEBUG),true)
      CFLAGS+=	-O0 -g
	  LOCAL_CFLAGS+=	-D_DEBUG
	  APP_OPTIM := debug
   else
	  CFLAGS+=	-O2 -g
	  LOCAL_CFLAGS+=	-DNDEBUG
	  APP_OPTIM := release
  endif
endif

即可任意断点调试,

这是理想情况,平时会有各种情况出现,之前经验是多下几个断点就好,

一直没太注意,

今日遇到了一坑,断点无论如何也挂不上,

仔细研究后发现:

1. 目录里千万不能含有空格,否则就是“No symbol table is loaded. Use the "file" command”,一头雾水,哪里出错都不知道;

2. 在Java代码里System.loadLibrary加上断点,可以很好地避免断点无法挂上的情况(按理论上这不会起作用的,Java/GDB 两个Debugger只能启其一);

3. 更好的解决方案就是用libandroid_native_app_glue,纯C/C++实现(NDK内有个例子可以参考);

时间消耗甚久,踩坑留标记,望以飨后人.

时间: 2024-10-19 00:16:37

Android NDK中的C++调试踩坑标记的相关文章

Android NDK中的Apache ANT和GUN Make

Android NDK是Android软件开发包SDK的相关工具集,用来扩展Android SDK的功能,从而使开发人员能够使用机器代码生成的编程语言(如C.c++和汇编语言)实现一些对代码性能要求较高的模块并将这些模块嵌入到Android应用程序中. Apache ANT是命令行构建工具,可以驱动任何根据目标和任务描述的过程. 安装命令 sudo apt-get install ant GNU Make是一种构建工具,用于控制应用源代码的可执行代码和其他部分代码的生成. 安装命令 sudo a

android ndk中的工具使用

1. 动态so处理: arm-linux-androideabi-readelf.exe -a XX.so > xx.txt 输出所有函数 arm-linux-androideabi-objdump.exe -dx XX.so > xx.txt 反汇编so包,此时使用 $(JNI_PROJ_PATH)/obj\local\armeabi下面带符号表的so包.JNI_PROJ_PATH为编译so包时jni文件夹的根目录 2. 静态a处理: arm-linux-androideabi-ar.exe

android NDK中sqlite3数据库的使用

工作需要使用数据库进行大量的插入工作,故此想通过使用c进行这部分工作,经过查资料,发现一篇文章比较实用: 方法1.使用源码sqlite3.h,sqlite3.c进行编译.  方法2.使用android编译好得到得libsqlite.so库    具体方法:    1) 使用adb命令 adb pull /system/lib/libsqlite.so 得到libsqlite.so库(在当前用户的根目录下). 2)把得到libsqlite.so拷贝到$NDK/platforms/android-3

Android WebView中那些不得不解决的坑~~

前面那张hybrid开发心得 有人问 怎么解决不用onJsPrompt 来回调js函数的问题.其实很简单,就是在在你的jscalljava回调函数内 另外开个线程去load js代码即可: 1 wb.post(new Runnable() { 2 @Override 3 public void run() { 4 wb.loadUrl("javascript:display_alert()"); 5 } 6 }); 好,然后开始说一下webview.webview其实我一直都很痛恨这个

Go语言gdb调试踩坑

整个是一个docker环境 docker版本: 1.12.1,镜像是我自己做的基于ubuntu:14.04.05. 容器操作系统版本: Ubuntu 14.04.5 LTS go版本: 1.6.3 在gdb中执行run命令出错! 错误输出: warning:Error disabling address space randomization: Operation not permitted 环境:docker 解决办法: warning:Error disabling address spac

LoRaWAN调试踩坑心得(二)

先说两句 抱歉,由于工作原因和个人原因,中间停更了这么久.接下来,本人会继续往下更,内容包括但不仅限于LoRa.文章还是会按照个人的习惯,坚持原创,一是作为自己的笔记,二是和广大工程师分享交流. LoRaWAN的定义是一种用于Low power,long range应用场景的无线通讯协议,所以关键的部分就有两个:1.低功耗 2.远距离 其中远距离目前是有LoRa这种无线通讯方式来完成,因为其再参数上具有-148db的超低灵敏度,使其具有在同发射功率下的更远的通讯距离 然后就是低功耗.下面我来讲讲

Android NDK调试C++源码(转)

[原创文章,转载请保留或注明出处,http://download.csdn.net/download/bigmaxim/5474055] 1. 相关软件 adt-bundle-windows-x86.zip --- Eclipse集成ADT插件,需要联网安装相应的Android SDK. jdk-6u43-windows-i586.exe --- JDK6 Eclipse运行需要JAVA环境,编译ANDROID应用也需要JAVA编译器. android-ndk-r8e-windows-x86.z

Android NDK fault addr deadbaad异常

这几天在在调试一个Android项目时,遇到了"signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad"异常,感觉是jni层操作内存不当引起的,由于是Android新手,没什么经验,而且调试ndk库又很麻烦,于是各种百度,各种搜索,ndk-stack,还是无法定位出现问题的地方,几乎奔溃!后面经过几经波折,单独测试了一些使用频繁的接口,果然,在一个jni接口中,java层传递的jbyteArray长度为1,这就奇怪了

ViewPager实现无限轮播踩坑记

最近笔者想通过ViewPager来实现一个广告Banner,并实现无限轮播的效果,但是在这个过程中踩了不少的坑,听我慢慢道来.如果大家有遇到和我一样的情况,可以参考我的解决方法,没有那就更好,如果针对我的解决方法,有啥更好的方案,欢迎和我分享 使用ViewPager实现无限轮播代码 MainActivity代码 public class MainActivity extends AppCompatActivity { private ViewPager mViewPager; private T