0

我正在编写一个操作系统,但在尝试调试我的代码时遇到了问题。我正在使用 GDB 连接到 Bochs 的 GDB 存根以“远程”调试我的内核。连接工作正常,从内核文件加载调试符号也是如此。我为成功定位的 kmain 函数设置了一个断点,并且调试器正确中断(在我的内核中)。但是,我不能通过我的代码“步进”或“下一步”,GDB 显然也不能确定哪一行代码是当前行。

当我尝试“步进”时,我收到以下消息:“找不到当前函数的边界”。这是我在任何时候收到的唯一错误消息。

我的代码正在使用 -g 标志在 GCC 中编译(我尝试过使用 GCC 选项的其他类型的调试信息;没有一个有效。)我尝试查看 GDB 手册,以及寻找答案,我我完全被难住了。任何帮助都会很棒。

谢谢!

4

3 回答 3

3

好吧,我得到了调试工作,但我不得不切换模拟器。我能够让 GDB 与 Qemu 一起工作,尽管我在这样做时也遇到了问题。为了让 GDB 连接到 Qemu gdbserver,我必须将以下选项传递给 Qemu:“-gdb tcp::1234,ipv4”。花了我很长时间才弄清楚...现在调试完美!

于 2010-06-22T17:58:48.263 回答
0

谷歌搜索抛出“这是因为当您附加到 gdbserver 时,调试下的进程尚未完成 C 启动代码” http://www.cygwin.com/ml/gdb/2005-03/msg00237.html .. . http://www.bravegnu.org/gnu-eprog/c-startup.html描述了为嵌入式设备编码时的过程,也许这会有所帮助?

如果您找到答案,请在此处发布,因为我也想知道问题的解决方案是什么。

于 2010-06-21T18:33:01.593 回答
0

我不知道为什么,但启用 gdb-stub 的 bochs 似乎对配置选项很挑剔。在某些系统上,以下选项会破坏它:--enable-x86-64、--enable-vmx

于 2011-03-15T19:01:59.157 回答