В вычислительной технике сбой или системный сбой происходит , когда компьютерная программа, например, программное приложение или операционная система, перестает нормально функционировать и завершает работу . В некоторых операционных системах или отдельных приложениях служба отчетов о сбоях сообщит о сбое и любых связанных с ним подробностях (или предоставит пользователю возможность сделать это), обычно разработчику (ам) приложения. Если программа является критической частью операционной системы, вся система может выйти из строя или зависнуть, что часто приводит к панике ядра или фатальной системной ошибке .
Большинство сбоев являются результатом ошибки программного обеспечения . Типичные причины включают доступ к недействительным адресам памяти, [a] неверные значения адресов в счетчике программ , переполнение буфера , перезапись части затронутого программного кода из-за более ранней ошибки, выполнение недействительных машинных инструкций ( недопустимый или несанкционированный код операции) или запуск необработанного исключения . Первоначальная ошибка программного обеспечения, которая запустила эту цепочку событий, обычно считается причиной сбоя, который обнаруживается в процессе отладки . Первоначальная ошибка может быть далека от кода , который фактически вызвал сбой.
В ранних персональных компьютерах попытка записи данных на аппаратные адреса за пределами основной памяти системы могла привести к повреждению оборудования. Некоторые сбои являются эксплуатируемыми и позволяют вредоносной программе или хакеру выполнить произвольный код , что позволяет тиражировать вирусы или получать данные, которые обычно были бы недоступны.
Приложение обычно аварийно завершает работу , когда выполняет операцию, не разрешенную операционной системой. Затем операционная система выдает исключение или сигнал в приложении. Приложения Unix традиционно реагируют на сигнал, выгружая ядро . Большинство приложений Windows и Unix GUI реагируют, отображая диалоговое окно (например, показанное справа) с возможностью присоединения отладчика , если он установлен. Некоторые приложения пытаются восстановиться после ошибки и продолжить работу вместо выхода .
Приложение также может содержать код , приводящий к сбою [b] после обнаружения серьезной ошибки.
Типичные ошибки, приводящие к сбоям приложения, включают в себя:
Говорят, что «вылет на рабочий стол» происходит, когда программа (обычно видеоигра ) неожиданно завершает работу, резко возвращая пользователя на рабочий стол . Обычно этот термин применяется только к сбоям, при которых не отображается ошибка, поэтому все, что пользователь видит в результате сбоя, — это рабочий стол. Во многих случаях нет явного действия, которое вызывает вылет на рабочий стол. Во время нормальной работы программа может зависнуть на короткий период времени, а затем закрыться сама по себе. Также во время нормальной работы программа может стать черным экраном и многократно воспроизводить последние несколько секунд звука (в зависимости от размера аудиобуфера ) , который воспроизводился перед вылетом на рабочий стол. В других случаях это может показаться вызванным определенным действием, например загрузкой области.
Ошибки с вылетом на рабочий стол считаются особенно проблемными для пользователей. Поскольку они часто не отображают сообщение об ошибке, может быть очень сложно отследить источник проблемы, особенно если время их возникновения и действия, происходящие непосредственно перед вылетом, не имеют никакой закономерности или общей основы. Один из способов отследить источник проблемы для игр — запустить их в оконном режиме. В Windows Vista есть функция, которая может помочь отследить причину проблемы CTD, когда она возникает в любой программе. [ требуется пояснение ] В Windows XP также есть похожая функция. [ требуется пояснение ]
Некоторые компьютерные программы, такие как StepMania и BBC Bamzooki , также вылетают на рабочий стол в полноэкранном режиме, но отображают ошибку в отдельном окне, когда пользователь возвращается на рабочий стол.
Программное обеспечение, на котором работает веб-сервер , может выйти из строя, сделав его полностью недоступным или выдав только сообщение об ошибке вместо нормального содержимого.
Например: если сайт использует базу данных 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 — это System ABEND 0C7 (исключение данных) и System ABEND 0CB ( деление на ноль ). [1] [2] [3] Abends могут быть «мягкими» (допускающими автоматическое восстановление) или «жесткими» (прекращающими действие). [4] В шутку утверждается, что этот термин произошел от немецкого слова «Abend», означающего «вечер». [5]
В зависимости от приложения сбой может содержать конфиденциальную и личную информацию пользователя . [6] Более того, многие ошибки программного обеспечения, которые вызывают сбои, также могут быть использованы для выполнения произвольного кода и других типов повышения привилегий . [7] [8] Например, переполнение буфера стека может перезаписать адрес возврата подпрограммы недопустимым значением, что вызовет, например, ошибку сегментации при возврате подпрограммы. Однако, если эксплойт перезапишет адрес возврата допустимым значением, код в этом адресе будет выполнен.
Когда сбои собираются в полевых условиях с помощью crash reporter , следующим шагом для разработчиков является возможность их локального воспроизведения. Для этого существует несколько методов: STAR использует символическое выполнение, [9] EvoCrash выполняет эволюционный поиск. [10]