Cocos2d-x ndkgdb 调试记录
17 Apr 2013由于目前Cocos2d-x中的libtiff.a静态库中存在main主函数,导致gdb调试时会出现问题,现在需要重新编译一个没有main函数的libtiff静态库
$ git clone git://github.com/dumganhar/libtiff.git $ cp -r libtiff $NDK_ROOT/samples/hello-jni/jni/tiff $ cd libtiff $ ./configure # 目的是生成tif_config.h和tiffconf.h两个文件 $ cp libtiff/{tif_config.h,tiffconf.h} $NDK_ROOT/samples/hello-jni/jni/tiff/libtiff $ vim $NDK_ROOT/samples/hello-jni/jni/tiff/libtiff/tif_config.h # 注释120行的#define HAVE_SEARCH_H 1与206行的#define LZMA_SUPPORT 1 $ vim $NDK_ROOT/samples/hello-jni/jni/tiff/libtiff/mkg3states.c # 注释掉main函数 $ vim $NDK_ROOT/samples/hello-jni/jni/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := tiff LOCAL_TIFF_SRC_FILES := \ tiff/libtiff/tif_dirread.c \ tiff/libtiff/tif_zip.c \ tiff/libtiff/tif_flush.c \ tiff/libtiff/tif_next.c \ tiff/libtiff/tif_ojpeg.c \ tiff/libtiff/tif_dirwrite.c \ tiff/libtiff/tif_dirinfo.c \ tiff/libtiff/tif_dir.c \ tiff/libtiff/tif_compress.c \ tiff/libtiff/tif_close.c \ tiff/libtiff/tif_tile.c \ tiff/libtiff/tif_open.c \ tiff/libtiff/tif_getimage.c \ tiff/libtiff/tif_pixarlog.c \ tiff/libtiff/tif_warning.c \ tiff/libtiff/tif_dumpmode.c \ tiff/libtiff/tif_jpeg.c \ tiff/libtiff/tif_jbig.c \ tiff/libtiff/tif_predict.c \ tiff/libtiff/mkg3states.c \ tiff/libtiff/tif_write.c \ tiff/libtiff/tif_error.c \ tiff/libtiff/tif_version.c \ tiff/libtiff/tif_print.c \ tiff/libtiff/tif_color.c \ tiff/libtiff/tif_read.c \ tiff/libtiff/tif_extension.c \ tiff/libtiff/tif_thunder.c \ tiff/libtiff/tif_lzw.c \ tiff/libtiff/tif_fax3.c \ tiff/libtiff/tif_luv.c \ tiff/libtiff/tif_codec.c \ tiff/libtiff/tif_unix.c \ tiff/libtiff/tif_packbits.c \ tiff/libtiff/tif_aux.c \ tiff/libtiff/tif_fax3sm.c \ tiff/libtiff/tif_swab.c \ tiff/libtiff/tif_strip.c LOCAL_TIFF_SRC_FILES += tiff/port/lfind.c LOCAL_SRC_FILES := $(LOCAL_TIFF_SRC_FILES) LOCAL_C_INCLUDES := $(LOCAL_PATH)/tiff/libtiff LOCAL_WHOLE_STATIC_LIBRARIES := cocos_jpeg_static include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c LOCAL_STATIC_LIBRARIES := tiff include $(BUILD_SHARED_LIBRARY) $(call import-module,libjpeg)
参考: https://code.google.com/p/tiffonandroid/source/browse/tiffviewer/project/jni/Android.mk
$ ndk-build NDK_MODULE_PATH=$COCOS2DX_ROOT/cocos2dx/platform/third_party/android/prebuilt $ cp obj/local/armeabi/libtiff.a $COCOS2DX_ROOT/cocos2dx/platform/third_party/android/prebuilt/libtiff/libs/armeabi
首先编译时要加NDK_DEBUG=1
$ cd $COCOS2DX_ROOT/samples/Cpp/HelloCpp/proj.android $ ./build_native.sh NDK_DEBUG=1
AndroidManifest.xml增加android:debuggable="true"
...
安装应用到模拟器
$ android update project -p . -t android-17 $ ant debug install
开始进行调试
$ ./ndkgdb.sh (gdb) b HelloWorldScene.cpp:83 (gdb) c # 这时点击退出按键将会断点到83行 Breakpoint 1, HelloWorld::menuCloseCallback (this=0x2a19b3a0, pSender=0x2a14b8d0) at jni/../../Classes/HelloWorldScene.cpp:83 83 CCDirector::sharedDirector()->end(); (gdb) q