• 使用gdb和gdbserver调试Android C/C++程序


    1,http://www.gnu.org/software/gdb/download/,下载最新版本的gdb源代码包,我使用的是gdb-7.6.tar.gz,使用tar命令进行解包(tar -xvzf gdb-7.6.tar.gz),cd进gdb-7.6/gdb目录,使用vi找到remote.c中的如下代码:
    if(buf_len > 2 * rsa->sizeof_g_packet)

      error(_("Remote 'g' packet reply is too long: %s"),rs->buf);

    将上面两行注释掉,添加如下代码

    if(buf_len > 2 * rsa->sizeof_g_packet)
    {
       rsa->sizeof_g_packet = buf_len;
      for(i = 0; i < gdbarch_num_regs(gdbarch); i++)
       {
        if(rsa->regs[i].pnum == -1)
          continue;
        if(rsa->regs[i].offset >= rsa->sizeof_g_packet)
          rsa->regs[i].in_g_packet = 0;
        else
          rsa->regs[i].in_g_packet = 1;
      }
    }
    使用如下命令对代码进行配置、编译和安装

    ./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v

    make

    make install

    2,gdbserver使用android4.2模拟器中自带的版本(v7.1)

    3,将NDK编译好的C/C++可执行程序,上传到模拟器中/data/test目录下,假设可执行程序的名称为testHello。

    4,使用命令:gdbserver :7000 /data/test/testHello 启动模拟器端的调试。

    5,启动arm-linux-gdb之前,使用vi打开~/.bash_profile文件,在其中添加:

    export PATH=$PATH:/usr/local/arm-gdb/bin,以便在程序的其他目录可以直接启动arm-linux-gdb程序

    6,cd至ndk编译好的testHello文件所在目录

    7,使用如下命令进行端口映射:adb forward tcp:7000 tcp:7000,将模拟器的7000端口和本机的7000端口进行映射

    8,使用命令:arm-linux-gdb testHello启动gdb调试

    9,使用target remote :7000 链接模拟器中gdbserver启动的服务。

    10,自此,我们就可以使用gdb命令进行代码调试了。

  • 相关阅读:
    IntelliJ Idea 常用快捷键列表
    JSON,字符串,MAP转换
    学习总是无效,是因为你没有稳定的输出系统
    华为离职副总裁徐家骏:透露年薪千万的工作感悟,太震撼了!
    Junit测试Spring应用Dubbo测试框架之-Excel 工具类
    Junit参数化测试Spring应用Dubbo接口
    TestNG参数化测试Spring应用Dubbo接口
    TestNG测试报告美化
    TestNG系列之四: TestNg依赖 dependsOnMethods
    【Java】Java_08 字符型与布尔值
  • 原文地址:https://www.cnblogs.com/fengfeng/p/3282253.html
Copyright © 2020-2023  润新知