我在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中 - add-symbol-file 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套接字上从其用户空间应用程序收到消息后,在指定的断点处停止,以便进行详细的调试,因为它允许我调试用户空间进程。请建议我如何解决此问题或有任何替代方法。我会非常感谢任何帮助或建议。谢谢!
答案 0 :(得分:1)
要调试内核,您需要使用KGDB / KDB。
答案 1 :(得分:0)
一种可能性:
在目标计算机上运行gdb服务器。在另一台机器上运行gdb。使用gcc上的-ggdb参数重新编译目标机器内核。使用所有-ggdb信息启动运行内核的目标机器的两台机器。在两台机器上都有可用的所有资源。从测试机器连接到目标机器。让gdb服务器连接到内核....