首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试操作系统

调试操作系统
EN

Stack Overflow用户
提问于 2010-01-09 02:08:24
回答 6查看 8.2K关注 0票数 28

我正在浏览一些关于操作系统的一般知识,然后偶然发现了一个问题。开发人员如何在开发操作系统时进行调试,即调试操作系统本身?操作系统开发人员可以使用哪些工具进行调试?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-09 02:53:21

调试内核是很困难的,因为您可能不能依赖崩溃的机器来传达正在发生的事情。此外,错误的代码可能在像中断处理程序这样可怕的地方。

据我所知,有四种调试操作系统的主要方法:

  1. 健全性检查,以及输出到屏幕。

Linux上的内核恐慌(known as "Oops"es)就是一个很好的例子。Linux人员编写了一个函数,该函数将打印出他们可以找到的内容(包括堆栈跟踪),然后停止所有操作。

即使是警告也是有用的。Linux为您可能在中断处理程序中意外进入睡眠的情况设置了保护。例如,mutex_lock函数将检查(在might_sleep中)是否处于不安全上下文中,如果处于不安全上下文中,则打印堆栈跟踪。

  • 调试器

传统上,在调试下,计算机所做的一切都是通过串行线输出到稳定的测试机。随着虚拟机的出现,您现在可以将一个VM的执行串行线连接到同一物理机上的另一个程序,这非常方便。然而,这自然要求您的操作系统发布它正在做的事情,并等待调试器连接。KGDB (Linux)和WinDBG (Windows)就是这样的操作系统内调试器。VMWare supports this story explicitly.

最近,VM开发人员已经了解了如何在不使用串行线或内核扩展的情况下调试内核。VMWare has implemented this在他们最近的文章中。

在操作系统中调试的问题(在我看来)与Uncertainty principle有关。中断(大多数硬错误肯定是这样的)是异步的、频繁的和不确定的。如果您的bug以特定的方式与两个中断的重叠有关,那么您将不会用调试器公开它;该bug甚至可能不会发生。也就是说,它可能会,然后调试器可能是useful.

  • Deterministic回放

当你得到一个似乎只在生产中出现的bug时,你会希望你能记录下发生了什么,并像安全摄像头一样重播。多亏了a professor I knew at Illinois,您现在可以在VMWare虚拟机中执行此操作。VMWare和相关人员的describe it all比我更好,他们提供了看起来像good documentation的东西。

确定性回放在这一领域是全新的,所以到目前为止,我还没有意识到有任何特别的惯用法。他们说,它对安全漏洞也特别有用。

  • 将所有东西都移到了用户空间。

最后,内核中的东西仍然更加脆弱,因此遵循Nucleus (或微内核)设计有一个巨大的开发优势,在这种设计中,您可以将内核模式组件削减到最低限度。对于其他任何事情,你可以使用无数的用户空间开发工具,你会更快乐。FUSE,一个用户空间文件系统扩展,就是一个典型的例子。

我喜欢最后一个想法,因为这就像是你写的程序是可写的。循环,不是?

票数 27
EN

Stack Overflow用户

发布于 2010-01-09 02:12:09

您可以使用VM:例如。debug ring0 code with bochs/gdbDebugging NetBSD kernel with qemu

或者使用类似于KDB的串行线。

票数 3
EN

Stack Overflow用户

发布于 2010-01-09 02:12:39

在引导场景中(操作系统从头开始),您可能必须引入远程调试功能(内存转储、日志记录等)。在操作系统内核中使用,并使用单独的机器。或者,您可以使用虚拟机/虚拟机管理程序。

Windows CE有一个称为KITL的组件-独立于内核的传输层。我想标题不言而喻。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2029639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档