今天嘗試用qemu+gdb的方式調試內核,但是當設置了斷點,程序執行到斷點時就報錯:remote ‘g’ packet reply is too long,錯誤圖片如下
解決辦法網上了,說是改一下gdb/remote.c的代碼,開始一臉懵逼,都不知道改哪里,知道看到了這篇博客:https://blog.csdn.net/baidu_31504167/article/details/93853921。這篇文章講到了如何避免這個問題:
重新下載gdb源碼版本可以自己選,應該都行,然后修改源碼目錄下 gdb/remote.c(在我電腦上是gdb-7.9.1/gdb/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->pnum == -1)
continue;
if (rsa->regs->offset >= rsa->sizeof_g_packet)
rsa->regs->in_g_packet = 0;
else
rsa->regs->in_g_packet = 1;
}
}
至於什么原因我暫時也不清楚,修改完成后編譯安裝即可,安裝過程可見上面鏈接的文章。