Если нельзя каким-то образом воспользоваться зашифрованными сообщениями об ошибках, то неплохо было бы хотя бы знать, что они значат! Рассмотрим три наиболее часто встречающихся случая:
Fatal exception error (неустранимая ошибка) – Такие приложения, как Microsoft Word, состоят из многих слоев и компонентов. Операционная система состоит из ядра, уровня служб операционной системы, возможно из уровня инкапсуляции на верхнем уровне системных служб, сотен программных библиотек, внутренних библиотек функций / классов и DLL-библиотек, а также главного уровня приложений. Большинством современных операционных систем и языков (таких как C++, Java и другие) поддерживаются концепции программирования, называемые исключениями и обработками исключений. Благодаря исключениям, различные слои могут обмениваться информацией о возникших проблемах. Например, допустим, что программе нужно некоторое количество памяти, и она отправляет операционной системе запрос на резервирование блока памяти. Если операционная система неспособна выполнить запрос на резервирование памяти (поскольку требуемый блок слишком большой, либо системе не хватает памяти, или по другой причине), она направляет на уровень, с которого поступил запрос, "Исключение, вызванное недостатком памяти". С различных уровней может продолжаться отправка исключения на более высокие уровни. На одном из уровней, через которые проходит исключение, это исключение необходимо перехватить и решить проблему. Программа должна принять соответствующее решение: "Оказывается, в системе недостаточно памяти. Нужно сообщить об этом пользователю, показав на экране соответствующее диалоговое окно". Если программа не перехватывает исключение (в связи с тем, что по каким-то соображениям программист не написал код, обеспечивающий перехват этого конкретного исключения), оно пройдет весь путь до самых верхних уровней и операционная система воспримет его как "необработанное исключение". Затем операционная система закроет программу. Хорошо составленные программы обрабатывают все исключения.
Ошибка, отсутствует страница – Программа использует для хранения данных оперативную память (ОЗУ). Например, если загрузить документ в программу Microsoft Word, большая часть редактируемого файла хранится в оперативной памяти. Поскольку программе нужна память, она требует у операционной системы выделения блоков памяти определенного размера. Программа помнит расположение каждого выделенного ей блока с помощью "ссылки". Если программа пытается записать данные за пределами выделенного ей блока памяти либо в ней происходит путаница и она пытается получить доступ к несуществующему блоку памяти с помощью неправильной ссылки, операционная система фиксирует такое нарушение и вырабатывает "ошибку из-за отсутствия страницы" или "ошибку сегментации". Операционная система прекращает работу программы, поскольку очевидно, что программа совершает нелогичные и неконтролируемые действия.
Запрещённая операция – Микропроцессор понимает конечное количество инструкций, причем каждая инструкция обозначается числом, которое называют "кодом операции". Код операции 43 может значить "сложить", 52 – "умножить", и т. п. Если программа вырабатывает недопустимый код операции, операционная система устраняет нарушение, закрывая программу-нарушителя. Запрещенные коды операций обычно генерируются программами, которые обратились к месту памяти, где не содержится верная информация для программы.
Все перечисленные проблемы возникают вследствие субъективных ошибок программистов. Программист может проявить недостаточное усердие и не обнаружить предпосылок для возникновения исключений, либо разрешить программе доступ к ненадлежащим участкам памяти. Иногда причина перечисленных проблем кроется в некомпетентности или недостаточном опыте программистов, но во многих случаях виной всему сложность современных программ. Программа управляет в сложном многоуровневом окружении сотнями исключений и часто миллионами блоков памяти. Одно неправильное действие – и произойдет крах приложения. Программы очень чувствительны к ошибкам. Во время тестирования можно найти многие ошибки, однако обычно таким образом все ошибки найти не удается.
|