您的位置:首页 > 移动开发 > Android开发

GDB+gdbserver 远程调试android native code

2013-04-27 15:28 471 查看
一、什么是gdb?

  它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C、C++代码。

  它主要可以做4件事情:

    1、随心所欲地启动你的程序。

    2、设置断点,程序执行到断点处会停住。(断点可以是表达式)

    3、程序被停住后,可以查看此时程序中发生的事。

    4、动态改变程序的执行环境一。

  我们需要使用gdbserver依附到我们要调试的进程上,gdb通过adbd和手机上的gdbserver进行socket通信。

二、远程调试实战

  1、在手机上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是手机上的端口)

     $ adb shell

     # ps   #查看要调试进程的PID

     # gdbserver :1234 --attach 96   #:1234是端口号,96 是进程ID

  2、使用adb做端口映射,将pc机上的端口定向到手机上gdbserver监听的端口

     $ adb forward tcp:1234 tcp:1234   #端口映射,将pc机的1234端口映射到手机的1234端口

  3、启动gdb向指定的pc机端口发信息开始调试

     android_project_root/prebuilt/linux-x86/arm-eabi-4.4.3/$ ./arm-eabi-gdb   #使用项目下的gdb客户端去连接gdbserver,gdb的类型要选择针对手机平台的,版本要和gdbserver一致。

     <gdb> target remote :1234   #连接本地的:1234端口,此端口已经和手机的1234端口做好映射。

     <gdb> file xxx/out/target/xx...xx/symbols/system/bin/mediaserver   #加载可执行程序,注意选择symbols下的,如果调试的进程是app进程,这里选择app_process。

     <gdb> set solib-search-path xxx/out/target/xx...xx/symbols/system/lib   #加载所有的动态连接库,注意选择symbols下的。

     <gdb> bt   #查看调用堆栈

     <gdb> list xxx/xxx..xxx/xxx.cpp   #查看相关文件

     <gdb> b 100    #在文件的第100行打断点

     <gdb> c    #继续执行程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息