1

我正在尝试调试 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

编辑:要启动 gdb,我输入

% cd ~/os161/root
% sys161 -w kernel

在一个窗口中,然后键入

% cd ~/os161/root
% cs161-gdb kernel
(gdb) target remote unix:.sockets/gdb

在第二个窗口中。

4

1 回答 1

0

有几种方法可以调试内核,一种方法是直接向内核添加调试消息。例如在系统中添加 DEBUG 宏。(lib.h)

...
DEBUG(DB_SYSCALL, "Entering into user mode\n");
...

就像您刚才所说的那样,您可以使用另一种方式来使用 GDB。而不是使用 's' 你应该使用 'n' 和 'bt' 来检查步骤。没有阅读任何错误,我不知道如何提供更多信息。我希望这有帮助。

于 2014-04-01T23:10:45.480 回答