• 使用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命令进行代码调试了。

  • 相关阅读:
    QPS/TPS的预估
    tornado多进程模式不同进程写不同日志
    [python]pypy优化python性能
    [linux]查看进程占用内存
    [linux]杀死同一个应用的所有进程
    [LINUX] 快速回收连接
    jdbc批量写入
    Android 手机卫士--参照文档编写选择器
    Android 手机卫士--导航界面1的布局编写
    Android 手机卫士--设置界面&功能列表界面跳转逻辑处理
  • 原文地址:https://www.cnblogs.com/fengfeng/p/3282253.html
Copyright © 2020-2023  润新知