我在两个虚拟机之间使用串口设置了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添加它的符号时,它不显示源。这意味着我的模块出了问题。任何人都可以帮我解决这个模块的问题吗?
答案 0 :(得分:0)
更改gdb版本并使用gdb下的directory命令指定源位置解决了无法查看源代码的问题。