是什么导致了致命异常错误等问题?

当 Microsoft Word 或 Excel 等程序“崩溃”时,意味着程序执行过程中出现了严重错误。操作系统通常会识别出这个严重问题,并以一种干净利落的方式终止有问题的应用程序。当它这样做时,操作系统会显示一些神秘的信息,例如“致命异常错误”(并且通常会显示一大串十六进制数字,这些数字对您这个用户来说完全没用,但可能对原始程序员有些用处)。程序崩溃的另一种情况是它将操作系统一起拖垮,这意味着您必须重新启动。

尽管您无法通过这些神秘的错误消息做任何事情,但至少了解它们的含义可能也不错!那么,让我们来了解最常见的三种情况:

广告

  1. 致命异常错误 - 像 Microsoft Word 这样的应用程序由许多层和组件组成。包括核心操作系统、操作系统服务层、可能在系统服务之上的封装层、数百个软件库、内部函数/类库和 DLL,最后是主应用程序层。大多数现代操作系统和语言(如 C++Java 等)都支持称为异常异常处理的编程概念。异常允许不同层之间相互通信问题。例如,假设程序需要一些内存,因此它要求操作系统保留一块内存。如果操作系统无法满足内存请求(因为请求的块太大,或者系统内存不足,或其他原因),它将向发出请求的层“抛出内存异常”。不同的层可能会继续向上抛出异常。在某个环节,其中一层需要“捕获异常”并处理问题。程序需要说:“哇——系统内存不足。我需要用一个友好的对话框告诉用户。”如果程序未能捕获异常(因为某种原因程序员没有编写代码来处理该特定异常),则该异常会一直传递到所有层的顶部,操作系统将其识别为“未处理的异常”。操作系统随后会关闭该程序。设计良好的软件会处理所有异常。
  2. 无效页面错误 - 程序使用内存(RAM)来存储数据。例如,当您将文档加载到 Microsoft Word 中时,您正在编辑的文件的很大一部分会占用 RAM 中的空间。当程序需要内存时,它会向操作系统请求特定大小的内存块。程序使用“指针”记住它分配的每个内存块的位置。如果程序尝试将数据写入内存块末尾之外的位置,或者程序混淆并尝试使用无效指针访问不存在的内存块,操作系统会检测到这种情况并生成“页面错误”或“分段错误”。操作系统会关闭程序,因为程序显然不知道它在做什么。
  3. 非法操作 - 微处理器拥有限定数量的指令,每条指令都由一个称为“操作码”的数字表示。操作码 43 可能表示“加”,操作码 52 可能表示“乘”等。如果微处理器正在执行程序,并遇到一个它不识别或由于当前状态而无法执行的操作码,那么微处理器就会停止并报错。操作系统通过关闭有问题的程序来处理这个错误。非法操作码通常来源于软件跳转到内存中不包含有效程序信息的位置。

所有这些问题都是由程序员的人为错误造成的。程序员不够勤奋,未能捕获异常,或者允许程序访问无效内存。有时,根本原因是能力不足或经验不足,但在许多情况下,则是当今程序的复杂性所致。在一个错综复杂的分层环境中,一个程序管理着数百个异常和数百万个内存块。一步走错,应用程序就会崩溃——软件非常脆弱。测试能发现许多错误,但通常无法发现所有错误。

广告

广告

加载中...