GDB远程调试Linux内核遇到的bug(2)

到gdb的官方站点:https://www.gnu.org/software/gdb/current/
(gdb代码托管在这里:git clone git://sourceware.org/git/binutils-gdb.git )
找到它的Bug database:https://sourceware.org/bugzilla/
搜索到一个相关的patch:https://sourceware.org/bugzilla/show_bug.cgi?id=13984

--- remote.c 2015-02-20 19:11:44.000000000 +0200 +++ remote-fixed.c 2015-08-12 20:00:14.966043900 +0300 @@ -6154,8 +6154,20 @@ buf_len = strlen (rs->buf); /* Further sanity checks, with knowledge of the architecture. */ - 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) + // 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->pnum == -1) + continue; + if(rsa->regs->offset >= rsa->sizeof_g_packet) + rsa->regs->in_g_packet = 0; + else + rsa->regs->in_g_packet = 1; + } + } /* Save the size of the packet sent to us by the target. It is used as a heuristic when determining the max size of packets that the 5. 解决

1. 下载gdb 7.12版本的源码

2. 验证7.12是否存在该问题

为了不与原本安装的gdb冲突,configure时指定make install的路径 “./configure --prefix=/home/luzeshu/tools/gdb-7.12” “make” “make install” 重复上面几个step,发现7.12一样有该问题。

3. 解决 方法1: 按照上面的patch,修改源码。

方法2(版本7.9): 如果下载了7.9的源码,可以把patch保存成“fix-remote.patch”文件,直接用“patch < fix-remote.patch” 打补丁。 如果出现下面错误,或许是空格的问题,给patch命令加上 --ignore-whitespace

patching file remote.c Hunk #1 FAILED at 6154. 1 out of 1 hunk FAILED -- saving rejects to file remote.c.rej

方法2(版本7.12): 用7.12版本的,同样可以用上面的patch文件,不过line number要把6154改成7.12版对应的line number。

改完代码,再重新编译安装。再重复上面几个step,解决了。

6. gdb set architecture

最后一点,执行完lret切换到长模式之后,需要通过“set architecture i386:x86-64:intel”给gdb设置成64位。如果CPU进入长模式,而GDB没有跟着设置,显示的信息都是错乱的。 这里猜想是gdb所处的模式(32位或64位)对报文数据解读出的差错。

GDB调试程序用法

GDB+GDBserver无源码调试Android 动态链接库的技巧

使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境)

Ubuntu上用GDB调试printf源码

GDB调试命令

强大的C/C++ 程序调试工具GDB 

Linux GDB调试 详述

使用GDB命令行调试器调试C/C++程序

GDB调试命令总结 

GDB调试工具入门 

GDB 的详细介绍请点这里
GDB 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9e29381cb826a8f0e56a8a394cbda16e.html