1

我在两个 VM 之间使用串行端口设置了 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 添加它的符号时,它不会显示源代码。这意味着,我的模块有问题。谁能帮我这个模块有什么问题?

4

1 回答 1

0

更改gdb版本并使用gdb下的目录命令指定源位置解决了看不到源代码的问题。

于 2014-05-08T05:44:09.997 回答