linux - GDB:linux 内置模块中的断点失败

标签 linux linux-kernel operating-system gdb

我正在使用通过串行端口连接的两个虚拟机调试 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 处设置一个断点,它会被找到 here ,我收到以下错误:

(gdb) break htb_dequeue_tree

No symbol "htb_dequeue_tree" in current context.

最佳答案

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

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

关于linux - GDB:linux 内置模块中的断点失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50618517/

相关文章:

Java7 DatagramSocket.setReceiveBufferSize Windows和Linux之间的方式不同?

c++ - 可以在没有互斥锁的情况下读取和验证共享内存吗?

linux - 为什么 GNU sort 会在这个特定文件上挂起 10 个小时以上

python - scrapy错误导入错误: No module named items

linux - 在编译时将参数传递给内置内核模块

assembly - 为什么在xv6中gdtdesc中有sizeof(gdt)-1

linux - 更新文件,但不更改文件修改日期。可以吗?

c - 我想为我自己的 Linux 内核工作文件夹生成交叉引用

linux - 如何从 *.ko 文件中获取默认内核模块名称?

c - 链接器如何解析 C 中多重定义的全局符号