3.安装gdb

1,171 阅读1分钟

1、什么是gdb

GDB是用来查看另一个程序在执行时“内部”发生了什么,或者另一个程序在崩溃时正在做什么的工具,常用来进行debug。

2、在ubuntu安装gdb

2.1、使用apt安装

idle@linux:~$ sudo apt install gdb
Reading package lists... Done
Building dependency tree       
Reading state information... Done
gdb is already the newest version (7.11.1-0ubuntu1~16.5).
0 upgraded, 0 newly installed, 0 to remove and 189 not upgraded.

但是在最后通过gdb在qemu上调试时,会出现如下错误(原因是gdb从qemu接收回来的g包大于gdb定义的g包的大小),需要对gdb源码就行修改再重编译,所以此方法不通。

截图.png

2.2、下载gdb源码进行编译后安装

gdb源码在此

选择下载gdb-7.11.1.tar.xz,将下载后的文件放入windows上的共享文件夹中,在ubuntu上再将其拷贝到需要的地方。

cd ~/study
cp /share_win/gdb-7.11.1.tar.xz ./
xz -d gdb-7.11.1.tar.xz
tar xvf gdb-7.11.1.tar
cd gdb-7.11.1/

修改gdb源码:

// 打开gdb/remote.c,把status 1处的代码屏蔽,增加status 2处代码
vi gdb/remote.c

//status 1
if (buf_len > 2 * rsa->sizeof_g_packet)
    error (_("Remote 'g' packet reply is too long: %s"), rs->buf);

//status 2
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->pnum == -1)
          continue;
       if (rsa->regs->offset >= rsa->sizeof_g_packet)
          rsa->regs->in_g_packet = 0;
       else
          rsa->regs->in_g_packet = 1;
   }
}

具体修改如下:

截图.png

在文件夹gdb-7.11.1/下,编译gdb并安装:

./configure
make
sudo make install

sudo make install时出现错误:

截图.png

执行如下命令sudo apt-get install texinfo,后重新编译安装即可。

将编译产物替换原ubuntu中的gdb:sudo cp gdb/gdb /usr/bin

3、参考文档:

qemu 2.0与gdb连接调试内核时出现"Remote 'g' packet reply is too long"

lan120576664:七、Ubuntu系统上gdb工具编译