Android NDK R8提供四套运行时环境来支持c++特性:
System, gabi++, stlport, gnustl
Gnustl支持 C++exceptions, C++ RTTI, Standard Library. 其他的不一定全支持。
动态调试:
1. 手动添加log.v()
2. 栈跟踪 new Exception(“print trace”).printStackTrace();
3. DDMS中的Method Profiling Start/Stop Method Profiling
Android.os.Debug.startMethodTracing(“aa”); func();Android.os.Debug.stopMethodTracing
aa.trace将生成在/mnt/sdcard/aa.trace. adb pull /mnt/sdcard/aa.trace.
4. 使用IDA Pro调试android原生程序
Adb shell chmod 755 /data/local/tmp/debugnativeapp
Adb shell chmod 755 /data/local/tmp/android_server
Adb shell /data/local/tmp/android_server
Adb forward tcp:23946 tcp:23946
Menu->Debugger->run->remote ArmLinux/android dbbugger application:/data/local/tmp/debugnativeapp
directory:/data/local/tmp
hostname:localhost port:23946
点OK,ida会远程执行debugnativeapp并中断在main入口处。
5. 使用IDA Pro调试android原生动态库
Adb shell chmod 755 /data/local/tmp/android_server
Adb shell /data/local/tmp/android_server
Adb forward tcp:23946 tcp:23946
Menu->Debugger->Attach->remoteArmLinux/android dbbugger
hostname:localhost port:23946
6. 用gdb代替ida调试