当内核崩溃时,Windows 会显示著名的蓝屏死机信息。为什么蓝屏信息中不显示“此崩溃由驱动程序 D 的作者 X 公司造成”?这样用户难道不会更容易理解谁应该为问题负责吗?
当你指责他人时,你需要确保自己指责得当。如果你搞砸了,那么你就会像那些“寻找我丢失的手机”应用程序一样,给出错误的手机位置,导致一些可怜的房主不断受到骚扰。
内核知道崩溃是由于执行了一条特定指令而发生的,它甚至可以找出该指令试图访问的内存地址。但执行该指令的驱动程序不一定是导致崩溃的罪魁祸首。
故障的一大类是内存损坏。这类故障通常很难调试,因为内存损坏通常不会表现为造成损坏的代码崩溃,而是表现为尝试使用损坏数据的代码崩溃。如果你责怪执行崩溃指令的驱动程序,那么你就是责怪受害者,而不是罪魁祸首。
如果您假设内存损坏是随机的,那么每次系统崩溃时,它都会归咎于不同的驱动程序,而用户的结论可能是“一定有一些未知的驱动程序导致所有这些其他驱动程序崩溃。” 但也可能是“每次我 总裁电子邮件列表 尝试修复 Windows 归咎于崩溃的驱动程序时,其他驱动程序就会崩溃。 Windows 太糟糕了,以至于所有驱动程序都崩溃了! 有时,它会回来重新归咎于我刚刚修复的驱动程序。 哦,我该如何修复ntoskrnl.exe驱动程序?”
此外,假设内存损坏是随机的也是不成立的。我们已经看到内存损坏错误不断重复损坏同一个无辜受害者。因此,您甚至不能使用经验法则“好吧,如果十次连续崩溃都发生在同一条指令上,那么该代码肯定有问题。”
确定本机代码中访问冲突的责任人很困难,因为内存损坏的性质可能导致访问冲突发生在与问题根源无关的组件中。错误的责任认定会导致用户(和技术记者)手持火把和干草叉冲进公司总部,现在您就面临公关和法律问题。
相关阅读:Windows 95 在其蓝屏消息中提供了崩溃驱动程序的名称,给用户带来了错误的印象,认为是 Windows 提供的驱动程序导致了他们的系统崩溃。
附加阅读:史蒂夫·鲍尔默并没有为蓝屏死机撰写文本。但他确实为Windows 3.1 中的++屏幕撰写了文本CtrlAltDel。
雷蒙德参与 Windows 的开发已有 30 多年。2003 年,他创办了一个名为 The Old New Thing 的网站,该网站的受欢迎程度远远超出了他的想象,这一发展至今仍让他感到毛骨悚然。该网站催生了一本书,巧合的是,这本书也名为 The Old New Thing(Addison Wesley 2007)。他偶尔会出现在 Windows Dev Docs Twitter 帐户上,讲述一些毫无用处的故事。
为什么 Windows 蓝屏死机时不会明显标明创建崩溃驱动程序的公司?
-
- Posts: 845
- Joined: Thu Jan 02, 2025 7:05 am