Android GDB 调试C/C++代码环境搭建

               在Android操作系统里面,我们调试native 层的C/C++代码,一般用的都是GDB。搭建环境之前,我们需要从google官网上获取到NDK包。

               对于GDB调试环境的搭建,我们首先要有gdbserver(运行在手机)和gdbclient(运行在pc,所以我们首先第一步要先获取这两个工具,对于gdbserver,手机上已经自带有,所以无需再获取,对于gdbclient,因为我们正常情况都是在windows下进行调试,所以我们需要在windows下能运行的gdbclient。很幸运,在我们的NDK包里面,提供了能在windows下运行的gdbclientNDK文件夹/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-gdb.exe)。

有了gdbservergdbclient下面我们以系统里面的mediaserver为例,进行调试。

              1、首先通过adb shell进入手机的linux命令界面,然后输入

gdbserver :1234 /system/bin/mediaserver(其中1234是指端口号,后面的是/system/bin/mediaserver指要调试的程序,也可以用这种方式启动监听:

gdbserver :1234 –attach  进程ID)

      

             2、启动arm-linux-androideabi-gdb.exe,然后输入:

shell adb forward tcp:1234 tcp:1234,接着再输入:

target remote localhost:1234,

       这一步输入完成后,在gdbserver端出现:Remote debugging from host 127.0.0.1,这样的信息说明就连接成功了。

  

             3、把带调试信息的mediaserver可执行文件导入到gdbclient,假如我把mediaserver放到我的G盘的根目录下,则可用命令file G:/mediaserver,进行导入。(我们本地编译代码的时候,系统的native层的系统进程之类的,默认编译出来都是带有可调试信息的,在out/target/product/cs02ctc/symbols/system/bin可以找到)

            4、把调试代码的库给导入到gdbclient,首先我们把out/target/product/cs02ctc/symbols这个文件夹拷贝到本地,我是拷贝到G 盘。然后通过命令set solib-search-path G:/symbols/system/lib

set solib-absolute-prefix G:/symbols/system.

            5、最后我们把我们的代码路径导入到gdbclient(这步很重要,如果没有这操作的话,调试的时候根本就看不到我们的代码):

directory //109.131.7.122/zhaohui/LinGuohong/CS02new/android

//109.131.7.122/zhaohui/LinGuohong/CS02new/android这个是个人的代码路径。

             6、输入命令l,就可以看到mediaserver的代码了,下面测试一下。

打断点到waitBeforeAdding这个函数:b waitBeforeAdding; 然后输入命令c,等待程序停到waitBeforeAdding,然后单步运行:n,如果单步执行OK的话,说明你前面所有的操作都是正确的!

         至此,我们就可以使用GDB命令来调试我们的代码了。

展开阅读全文

没有更多推荐了,返回首页