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源码就行修改再重编译,所以此方法不通。
2.2、下载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;
}
}
具体修改如下:
在文件夹gdb-7.11.1/下,编译gdb并安装:
./configure
make
sudo make install
在sudo make install时出现错误:
执行如下命令sudo apt-get install texinfo,后重新编译安装即可。
将编译产物替换原ubuntu中的gdb:sudo cp gdb/gdb /usr/bin