我正在尝试调试os161,但由于缺少调试信息而遇到麻烦。我的所有函数都没有行号信息,因此我能够执行类似“b lock_acquire”的操作,但是当我执行“s”时它会说“单步执行直到退出函数lock_acquire, 它没有行号信息。“当我尝试执行”l lock_acquire“时,我也得到一个”No line number known error“,当我在lock_acquire并输入”p lock“时,得到”当前上下文中没有符号锁定。“ “。此外,当我键入ptype curthread时,它说”数据变量,没有找到调试信息“而不是有用的东西。我使用了这里的配置指示http://www.cdf.utoronto.ca/~csc369h/fall/docs/configure.shtml。有没有办法在编译os161时添加更多的调试信息?
编辑: 要启动gdb,我输入
% cd ~/os161/root
% sys161 -w kernel
在一个窗口中输入
% cd ~/os161/root
% cs161-gdb kernel
(gdb) target remote unix:.sockets/gdb
在第二个窗口中。
答案 0 :(得分:0)
有几种方法可以调试内核,一种方法是直接向内核添加调试消息。例如 在系统中添加DEBUG宏。 (lib.h)
...
DEBUG(DB_SYSCALL, "Entering into user mode\n");
...
你可以像你刚才所说的那样使用GDB的另一种方式。而不是使用's',你应该使用'n'和'bt'来检查步骤。没有阅读任何错误我不知道如何提供更多信息。我希望这会有所帮助。