用 Android NDK 开发 Native 应用程序(二)

调试

1. 首先把要调试的程序上传到模拟器中。假定我们用 adb push hello /data/hello 将程序传到了模拟器的 /data 目录。注意确认 hello 有可执行权限。

2. 在模拟器上运行 gdbserver :<port> hello,启动调试。其中 port 是 gdbserver 在手机上监听的端口号,注意和后面我们用 gdb 连接的端口可能不是同一个。运行结果可能是:

3. 为了让 gdb 能够连接到 gdbserver 监听的端口,我们需要让模拟器转发端口:

adb forward tcp:3456 tcp:6789

上面命令的意思是把外界连接模拟器3456端口的包转发到模拟器内部手机系统的6789端口,也就是前面我们让 gdbserver 监听的端口。

上述转发功能也可以用 telnet 连接到模拟器之后用 redir 命令实现,大家可以自己 Google,这里不再赘述。

执行上述命令后,我们用 netstat -an 应该就能看到一条:

也就是说我们可以用 gdb 连接 3456 端口了。

4. 运行 NDK 中的 gdb(实际文件名是 arm-eabi-gdb):

运行后第一步自然是指定要调试的 target,我们要连接 gdbserver,所以命令是

那么后面就可以开始调试了,这里用 c 命令就可以将 hello 程序运行起来。

 

小提示:如果是用 ndk-build 编译的程序,输出到 libs/armeabi/ 目录下的程序一般是已经被 strip 去掉了调试信息的,调试的时候可以先用 file 命令加载带调试信息的文件,一般在 obj/local/armeabi/ 目录下。例如,如果我们要调试的程序是 hello, 那么 libs/armeabi/hello 文件是没有调试信息的,有调试信息的文件是 obj/local/armeabi/hello.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值