gdbserver 移植

来源:互联网 发布:2017最火的网络词 编辑:程序博客网 时间:2024/06/04 18:45

1、http://ftp.gnu.org/gnu/gdb/  下载gdb。gdb-7.6.2.tar.gz

2、编译gdb

$ tar   xzvf  gdb-7.6.2.tar.gz    

   $ cd  gdb-7.6.2

   $ ./configure  --target=arm-linux  --prefix=$PWD/bin

   $ mkdir bin

   $ make

   $ make install

安装成功后主要是会在/tianpei/share/arm-gdb/bin下生成三个工具分别是:

arm-linux-gdb arm-linux-gdbtui  arm-linux-run

这几个工具是在PC端运行。


3、编译gdbserver

   $cd gdb/gdbserver/

   $./configure  --target=arm-linux  --host=arm-linux-gnueabihf  --prefix=$PWD/bin

   $ mkdir bin

   $make 

   $make install  

   安装成功后会生成文件:

   $PWD/bin/arm-linux-gdbserver

   注意:gdbserver 是在板子上运行的,注意设置--host为交叉编译工具

4、调试

 1  arm-linux-gdbserver工具下载到开发板的/bin

 2、PC编译实例

  编译: $arm-linux-gcc -g hello.c -o hello

 1、 配制gdbserver

 设置主机IP地址为:192.168.1.10,开发板系统IP地址为:192.168.1.230
  在开发板中:

  #gdbserver 192.168.1.230:1234 hello
  Process test created:pid=80   //使gdbserver在1234端口监听。

  在PC中运行 arm-linux-gdb

  #arm-linux-gdb
  (gdb) target remote 192.168.1.230:1234    //若链接成功,开发板的串口终端会显示如下:
  Remote debugging from host 192.168.1.10
  (gdb) symbol file hello                              //此处的hello是PC机上的所在路径的hello
  (gdb) list
  (gdb) break 5

 

  //==================================
  如果gdb提示:GDB7.6 Remote 'g' packet reply is too long
  修改gdb/remote.c文件,屏蔽process_g_packet函数中的下列两行:

  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;
      }
   }