【发布时间】:2015-02-28 04:38:12
【问题描述】:
我正在 ubuntu 14.04 服务器上使用 openvswitch。我可以轻松地附加 gdb 及其任何二进制文件以调试其各种功能,但是当涉及到其内核模块时,我无法根据我的要求对其进行调试。 我正在使用以下步骤将 linux 内核与 gdb 连接: 1.gdb /tmp/vmlinux /proc/kcore 2. 向 GDB 添加符号文件: cd /sys/module/openvswitch/sections/ ls -A1 .cat .text .data .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 套接字上的用户空间应用程序接收到消息后在指定的断点处停止,以便进行详细调试,因为它允许我调试用户空间进程。请建议我如何解决此问题或是否有任何替代方法。对于任何帮助或建议,我将不胜感激。谢谢!
【问题讨论】:
-
想象一下,如果你可以在内核中设置一个断点,在同一台机器上使用调试器......然后 gdb 会在断点被命中时暂停内核,然后你的机器将完全冻结,因为内核已暂停...
-
这个线程的任何解决方案?我遇到了同样的问题。谢谢!
标签: c linux-kernel gdb