操作系统是如何进行调试的?

8

操作系统通常如何进行调试?它们不能像简单的控制台程序那样通过调试器进行逐步调试,而构建时间太长,无法反复进行小改动并重新编译整个系统。

3个回答

6

它们不像多吉字节的程序那样进行调试! :)

如果你指的是单个用户模式组件,它们主要可以像普通程序和库一样进行调试,因为它们就是普通的程序/库!

对于内核模式组件,每个操作系统都有自己的机制;这里提供了一些关于Windows内核调试的信息。它可以通过与调试机器连接的另一台机器(通过串口或其他方式)来完成。我不熟悉这个过程本身,但这就是它们工作的要点。(您需要设置一些引导加载程序选项,以便系统尽早准备好连接调试器。)


5
这取决于你所说的操作系统的哪个部分。当我在微软工作时,我在IE团队工作。我们使用Visual Studio调试IE和shell(Windows Explorer),一整天都在逐行调试它们。虽然有时候使用像NTSD这样的命令行工具进行调试更容易。
但是,如果你想要调试内核空间中的任何内容,例如操作系统内核或设备驱动程序,我猜这才是你真正想问的,那么你必须使用内核调试器。对于Windows来说,这是一个名为kd的命令行工具,通常你在一台机器上运行调试器并远程调试目标。

1

在整个历史上,有一整套技术,从控制台上闪烁的灯光,到使用硬件设备如ICE,再到更现代的技术,利用相当标准的调试器。其中一种技术,在操作系统开发人员中比应用程序开发人员更常见,就是核心转储的分析。可以看看Solaris上的mdb,了解Solaris内核开发人员如何进行一些调试。还有跟踪技术。从相当简单的日志记录包到更现代的技术如dtrace。

还要注意,所使用的技术取决于软件层。初始引导往往是一个相当难以进入的地方。但在此之后,现代操作系统的环境越来越像您所使用的应用程序设置。最终,这都是代码 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接