有些事真的很烦锁,但是又不得不做
环境:ubuntu12.04
ndkr9
android sdk
android 4.2.2 盒子,已root
过程:
1、c++ 编写程序
2、ndk-build NDK_DEBUG=1 //强制生成调试信息
3、adb push gdbserver /system/bin //把 生成的libs下armeabi下的 gdbserver 放到android盒子里,放到system/bin 下,可以直接启动
4、adb push 程序 /data/bin 下,这里一定要注意,程序不是libs下的 而是obj下的 obj/local/armeabi/ 下的程序,原因就是:默认情况下,android的编译系统在编译程序时已经使用了“-g”选项,即已经生成了调试信息。但是在生成最终的文件时,是经过strip的,去除了所有到调试信息。所以最终我们到调试目标要使用strip之前的文件。
5、调试步骤
a、启动终端 进入android,命令:
adb shell
b、在android终端启动调试, 命令:
cd /data/bin //程序放在了这里
gdbserver :1234 程序 //gdbserver 启动监听端口号,用于和pc机通信 调试
c、在启动终端,启动gdb, 命令:
arm-linux-androideabi-gdb //这个玩意在ndk toolchin 里,能找到吧
d、执行:
shell adb forward tcp:1234 tcp:1234
target remote localhost:1234
file obj/local/armeabi/程序
就可以调试了