В вычислительной технике сбой или сбой системы происходит, когда компьютерная программа, такая как программное обеспечение или операционная система, перестает работать должным образом и завершает работу . В некоторых операционных системах или отдельных приложениях служба отчетов о сбоях сообщает о сбое и любых деталях, связанных с ним (или дает пользователю возможность сделать это), обычно разработчику (ам) приложения. Если программа является важной частью операционной системы, вся система может выйти из строя или зависнуть, что часто приводит к панике ядра или фатальной системной ошибке .
Большинство сбоев являются результатом программной ошибки . Типичные причины включают в себя доступ к неверным адресам памяти, [а] неверные значения адреса в счетчике программ , переполнение буфера , перезапись части затронутого программного кода из-за более ранней ошибки, выполнение недопустимых машинных инструкций ( незаконный или несанкционированный код операции) или срабатывание необработанное исключение . Причиной сбоя обычно считается исходная программная ошибка, вызвавшая эту цепочку событий, которая обнаруживается в процессе отладки . Исходная ошибка может быть далека от кода , который фактически вызвал сбой.
В ранних персональных компьютерах попытка записи данных на аппаратные адреса за пределами основной памяти системы могла привести к повреждению оборудования. Некоторые сбои могут быть использованы и позволяют вредоносной программе или хакеру выполнить произвольный код , что позволяет копировать вирусы или получать данные, которые обычно были бы недоступны.
Приложение обычно выходит из строя , когда оно выполняет операцию, не разрешенную операционной системой. Затем операционная система запускает исключение или сигнал в приложении. Приложения Unix традиционно реагировали на сигнал сбросом ядра . Большинство приложений с графическим пользовательским интерфейсом Windows и Unix в ответ отображают диалоговое окно (например, показанное справа) с возможностью подключения отладчика, если он установлен. Некоторые приложения пытаются восстановиться после ошибки и продолжают работу, а не завершают работу .
Приложение также может содержать код , вызывающий сбой [b] после обнаружения серьезной ошибки.
К типичным ошибкам, приводящим к сбою приложения, относятся:
Говорят, что «вылет на рабочий стол» происходит, когда программа (обычно видеоигра ) неожиданно завершает работу, резко возвращая пользователя обратно на рабочий стол . Обычно этот термин применяется только к сбоям, при которых ошибки не отображаются, поэтому все, что пользователь видит в результате сбоя, — это рабочий стол. Во многих случаях нет видимых действий, которые вызывают сбой на рабочем столе. Во время нормальной работы программа может зависнуть на более короткий период времени, а затем закрыться сама. Также во время нормальной работы программа может отображать черный экран и неоднократно воспроизводить последние несколько секунд звука (в зависимости от размера аудиобуфера ) , который воспроизводился до того, как она вылетела на рабочий стол. В других случаях может показаться, что это вызвано определенным действием, например загрузкой области.
Ошибки, связанные с выходом на рабочий стол, считаются особенно проблематичными для пользователей. Поскольку они часто не отображают никаких сообщений об ошибках, может быть очень сложно отследить источник проблемы, особенно если время их возникновения и действия, происходящие непосредственно перед сбоем, не имеют какой-либо закономерности или общей точки зрения. Один из способов выявить источник проблемы игр — запустить их в оконном режиме. В Windows Vista есть функция, которая может помочь отследить причину проблемы CTD, когда она возникает в любой программе. [ нужны разъяснения ] Windows XP также включает аналогичную функцию. [ нужны разъяснения ]
Некоторые компьютерные программы, такие как StepMania и Bamzooki от BBC , также вылетают на рабочий стол в полноэкранном режиме, но отображают ошибку в отдельном окне, когда пользователь возвращается на рабочий стол.
Программное обеспечение, на котором работает веб-сервер веб -сайта, может выйти из строя, что сделает его полностью недоступным или выдаст только сообщение об ошибке вместо обычного контента.
Например: если сайт использует базу данных SQL (например, MySQL ) для сценария (например, PHP ) и этот сервер базы данных SQL выходит из строя, то PHP отобразит ошибку соединения.
Сбой операционной системы обычно происходит, когда возникает аппаратное исключение , которое невозможно обработать . Сбои операционной системы также могут произойти, когда внутренняя логика проверки работоспособности операционной системы обнаруживает, что операционная система потеряла свою внутреннюю самосогласованность.
Современные многозадачные операционные системы, такие как Linux и macOS , обычно остаются невредимыми при сбое прикладной программы.
Некоторые операционные системы, например z/OS , имеют средства обеспечения надежности, доступности и удобства обслуживания (RAS), и ОС может восстанавливаться после сбоя критического компонента, будь то из-за сбоя оборудования, например, неисправимой ошибки ECC, или сбоя программного обеспечения. , например, ссылка на неназначенную страницу.
Ненормальное завершение или ABEND — это ненормальное завершение работы программного обеспечения или сбой программы. Ошибки или сбои в сетевой операционной системе Novell NetWare обычно называются ABEND. В Интернете возникли сообщества администраторов NetWare , такие как abend.org.
Такое использование происходит от макроса ABEND в операционных системах IBM OS/360 , ..., z/OS . Обычно пишется с заглавной буквы, но может означать «abend». Некоторыми распространенными кодами ABEND являются системные ABEND 0C7 (исключение данных) и системные ABEND 0CB ( деление на ноль ). [1] [2] [3] Прерывания могут быть «мягкими» (с возможностью автоматического восстановления) или «жесткими» (прекращение действия). [4] В шутку утверждается, что этот термин произошел от немецкого слова «abend», означающего «вечер». [5]
В зависимости от приложения сбой может содержать конфиденциальную и личную информацию пользователя . [6] Более того, многие программные ошибки, вызывающие сбои, также могут быть использованы для выполнения произвольного кода и других типов повышения привилегий . [7] [8] Например, переполнение буфера стека может перезаписать адрес возврата подпрограммы недопустимым значением, что приведет, например, к ошибке сегментации , когда подпрограмма вернется. Однако если эксплойт перезапишет адрес возврата допустимым значением, код по этому адресу будет выполнен.
Когда сбои собираются в полевых условиях с помощью средства отчетов о сбоях , следующим шагом для разработчиков является возможность воспроизвести их локально. Для этого существует несколько методов: STAR использует символическое выполнение, [9] EvoCrash выполняет эволюционный поиск. [10]