c - 启用从用户空间进程调试内核模块

标签 c linux-kernel gdb

我正在 ubuntu 14.04 服务器上使用 openvswitch。我可以轻松地将 gdb 与其任何二进制文件附加在一起,以调试其各种功能,但是当涉及到其内核模块时,我无法根据我的要求对其进行调试。 我正在使用以下步骤将 Linux 内核附加到 gdb: 1. gdb/tmp/vmlinux/proc/kcore 2.向GDB添加符号文件: cd/sys/module/openvswitch/sections/ ls-A1 .cat .文本 .数据 .bss 3. 在 gdb 中 - 添加符号文件 datapath/linux/openvswitch.ko 0xf87a2000 -s .data 0xf87b4000 -s .bss 0xf87b4560 4.b vxlan_udp_encap_recv

但是当我生成用于测试 ovs 内核模块的数据包并跳过它时,它会显示“该程序未运行。”

注意:我通过运行以下命令确认了所有模块符号: nm root/ovs/_build-gcc/datapath/linux/openvswitch.ko = 打印所有符号。并且lsmod也确认了ovs内核模块的存在。

我想让 ovs 模块在 netlink 套接字上收到来自其用户空间应用程序的消息后停止在指定的断点处,以便进行详细的调试,就像它允许我调试用户空间进程一样方便。请建议我如何解决这个问题或者是否有其他选择。我将非常感谢任何帮助或建议。谢谢!

最佳答案

要调试内核,您需要使用 KGDB / KDB .

关于c - 启用从用户空间进程调试内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28778145/

相关文章:

c++ - 如何创建继承自 Release 的 CMake 配置类型

c - linux内核+条件语句

c - 我只是想像二维数组一样打印一维数组。但是当我运行这个程序时它没有显示任何输出

c - 在 gcc 中编译时关于警告输出的最佳实践?

c - 帮助理解宏观

python - 当匹配旧输出中的字符串时,pexpect python 模块的expect方法会中断

c++ - gdb backtrace 没有显示 main() 的完整堆栈跟踪

gdb - gdb 可以附加一个僵尸进程(<defunct>)吗?

C 程序 - 取消引用指针

multithreading - B/W TCB(线程控制 block )和PCB(工艺)有什么区别