如何调试操作系统?

时间:2011-03-06 01:50:04

标签: debugging operating-system

操作系统通常如何调试?它们无法通过调试器(如简单的控制台程序)逐步完成,并且构建时间太大,无法重复进行小的更改并重新编译整个事物。

3 个答案:

答案 0 :(得分:6)

它们未被调试为多GB的程序! :)

如果您指的是各个用户模式组件,它们可以像普通程序和库一样进行调试(因为它们 正常程序/库!)。

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

答案 1 :(得分:5)

这取决于您所谈论的操作系统的哪个部分。当我在MSFT工作时,我在IE团队工作。我们在Visual Studio中调试了IE和shell(Windows资源管理器),并且整天逐行完成它们。虽然有时候使用command line tool(如NTSD)进行调试更容易。

但是,如果您想调试内核中的任何内容,例如操作系统内核或设备驱动程序,我怀疑这是您要求的,那么您必须使用内核调试器。对于Windows,它是一个名为kd的命令行工具,通常在一台机器上运行调试器并远程调试目标。

答案 2 :(得分:1)

历史上有一整套技术,从控制台上的闪光灯到使用像ICE这样的硬件设备,再到使用相当标准调试器的更现代技术。 OS开发人员和应用程序开发人员之间更常见的一种技术是分析核心转储。在solaris上查看类似mdb的内容,了解Solaris内核开发人员如何进行一些调试。还使用了跟踪技术。从相当简单的日志包到任何更现代的技术,如dtrace。

另请注意,所使用的技术取决于软件层。初始启动往往是一个相当困难的地方让你的手指。但在此之后,现代操作系统的环境看起来越来越像您习惯的应用程序设置。最后,它是所有代码:)