我正在编写操作系统,我在尝试调试代码时遇到了问题。我正在使用GDB连接到Bochs的GDB存根来“远程”调试我的内核。连接工作正常,从内核文件加载调试符号也是如此。我为kmain函数设置了一个断点,该函数已成功定位,调试器正确中断(在我的内核中)。但是,我不能通过我的代码“步进”或“下一步”,GDB也不能明确地确定哪一行代码是当前行。
当我尝试“步”时,我收到以下消息:“找不到当前功能的界限”。这是我在任何时候得到的唯一错误信息。
我的代码是在GCC中用-g标志编译的(我已经尝试过使用GCC选项的其他类型的调试信息;没有一个工作过。)我试过查看GDB手册,以及搜索答案,我完全难过了。任何帮助都会很棒。
谢谢!
答案 0 :(得分:3)
好吧,我调试了工作,但我不得不切换模拟器。我能够让GDB与Qemu一起工作,尽管我也遇到了问题。为了让GDB连接到Qemu gdbserver,我必须将以下选项传递给Qemu:“ - gdb tcp :: 1234,ipv4”。让我永远想清楚......调试现在完美无缺!
答案 1 :(得分:0)
谷歌搜索引发“这是因为当你附加到gdbserver时,进程下 debug尚未完成C启动代码“http://www.cygwin.com/ml/gdb/2005-03/msg00237.html ... http://www.bravegnu.org/gnu-eprog/c-startup.html描述了编码嵌入式设备的过程,这可能会有所帮助吗?
如果您找到答案,请在此处发布,因为我想知道问题的解决方案是什么。
答案 2 :(得分:0)
我不知道为什么但启用了gdb-stub的bochs似乎对配置选项很挑剔。在某些系统上,以下选项会破坏它: --enable-x86-64, - enable-vmx