使用gdb调试内核时无法查看源代码

时间:2014-04-23 12:17:32

标签: c linux debugging linux-kernel kgdb

我在两个虚拟机之间使用串口设置了kgdb(目标是主机的克隆。)我可以在其中设置断点。但是当遇到断点时,我尝试在gdb中使用list命令查看源代码,但是它显示了kgdb.c的源代码而不是我的文件,其中命中了断点,如下所示:。

(gdb) l
1713    void kgdb_breakpoint(void)
1714    {
1715            atomic_set(&kgdb_setting_breakpoint, 1);
1716            wmb(); /* Sync point before breakpoint */
1717            arch_kgdb_breakpoint();
1718            wmb(); /* Sync point after breakpoint */
1719            atomic_set(&kgdb_setting_breakpoint, 0);
1720    }
1721    EXPORT_SYMBOL_GPL(kgdb_breakpoint);
1722
(gdb)
1723    static int __init opt_kgdb_wait(char *str)
1724    {
1725            kgdb_break_asap = 1;
1726
1727            if (kgdb_io_module_registered)
1728                    kgdb_initial_breakpoint();
1729
1730            return 0;
1731    }
1732
(gdb)
1733    early_param("kgdbwait", opt_kgdb_wait);
(gdb)
Line number 1734 out of range; kernel/kgdb.c has 1733 lines.
(gdb)

如何在断点命中时查看适当的源?

[编辑]当我尝试列出已经是vmlinux(静态编译内核)一部分的函数源时,它会显示它的来源。但是当我尝试调试动态加载的模块并使用add-symbol-file添加它的符号时,它不显示源。这意味着我的模块出了问题。任何人都可以帮我解决这个模块的问题吗?

1 个答案:

答案 0 :(得分:0)

更改gdb版本并使用gdb下的directory命令指定源位置解决了无法查看源代码的问题。