Android NDK中的C++調試踩坑標記

RT,android

Android NDK中的C++調試,app

GDB調試比較麻煩,在ADT Eclipse中:debug

1.配置好NDK給工程加上Native Support調試

2.編譯中加上NDK_DEBUG=1blog

3.而後改造下mk文件:ip

#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

便可任意斷點調試,編譯

這是理想狀況,平時會有各類狀況出現,以前經驗是多下幾個斷點就好,table

一直沒太注意,class

今日遇到了一坑,斷點不管如何也掛不上,cli

仔細研究後發現:

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內有個例子能夠參考);

 

時間消耗甚久,踩坑留標記,望以饗後人.

相關文章
相關標籤/搜索