我正在用ddd在qemu中调试JOS内核(来自mit操作系统实验室)。我在调用init.c中定义的内核主函数i386_init的汇编指令上设置了一个断点。当我启动内核时,ddd(gdb)在该指令上很好地中断,并显示绿色箭头;但是当我使用stepi命令时,绿色箭头消失了,ddd没有打开应该包含i386init()定义的文件。并且调试过程仅使用gdb继续。ddd没有遵循流程。此外,当我打开文件init.c时,ddd显示了以下错误:
"kern/init.c"的第1行位于地址0xf0100040,但不包含任何代码。\n
我对这种错误做了一些研究,似乎问题来自于动态库。但就我而言,没有动态库。那么,是什么导致了这种问题,以及如何解决呢?
这个问题是由我构建的交叉编译器引起的,我认为它可能有点bug。因为我更改了编译器,ddd现在运行良好。