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内有个例子可以参考);
时间消耗甚久,踩坑留标记,望以飨后人.