我正在使用通过串口连接的两台虚拟机来调试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.
工作正常!
但是,如果我在找到here的htb_dequeue_tree
处设置断点,则会收到以下错误:
(gdb) break htb_dequeue_tree
当前上下文中没有符号“htb_dequeue_tree”。
答案 0 :(得分:0)
最典型的原因是函数内联 - 然后没有符号开头。通常你可以在文件+行对上放置一个中断(例如foo.c:42)。
在您的特定情况下,该函数是静态的,只有一个用户:htp_dequeue。如果您反汇编它,您可能会看到来自htp_dequeue_tree的代码悄悄进入。如果没有,还会发生其他一些破坏(打破其他功能有效吗?)
答案 1 :(得分:0)
问题是HTB是一个动态插入的内置模块,因此在制作时,它不包含在包含符号的OfficeArchitect.Validation.CommandHandler.csproj
文件中。
要解决此问题,必须将其更改为内部部件而非模块,这可以在vmlinux
跑步
menuconfig
找到该模块,并将其从make menuconfig
更改为<m>
重新制作你的内核,安装模块并安装,这应该会产生一个新的<*>
,它将包含所需模块的符号,这样你就可以在任何一行\ function name上断点。