首页 > 解决方案 > GDB:linux内置模块中的断点失败

问题描述

我正在使用通过串口连接的两个虚拟机调试 linux 内核。

目标机器等待来自远程 gdb 的连接,方法kgdbwait()kgdboc=ttyS0,115200/boot/grub/grub.cfg.

主机中

sudo gdb ./vmlinux

符号被读取,我应该能够在函数名称上放置断点。

(gdb) break oom_kill_process
Breakpoint 1 at 0xc1172ef0: file mm/oom_kill.c, line 843.

工作正常!

但是,如果我在此处htb_dequeue_tree找到的断点设置,我会收到以下错误:

(gdb) break htb_dequeue_tree

当前上下文中没有符号“htb_dequeue_tree”。

标签: linuxlinux-kerneloperating-systemgdb

解决方案


最典型的原因是函数被内联 - 然后没有符号开始。很多时候,您可以在文件+行对上放置一个中断(例如 foo.c:42)。

在您的特定情况下,该函数是静态的,并且只有一个用户:htp_dequeue。如果你反汇编它,你可能会看到来自 htp_dequeue_tree 的代码被吞入其中。如果没有,还有其他一些问题正在发生(其他功能的中断是否有效?)


推荐阅读