Что вызывает зависание программы - PullRequest
3 голосов
/ 22 марта 2011

Из моего опыта программирования, когда у программы возникает проблема, она аварийно завершает работу, будь то случайное исключение или фрагмент кода, который должен был быть проверен на наличие ошибок, но не был и выкинут. Что может заставить программу полностью заморозить систему до такой степени, что потребуется перезапуск.

Редактировать: Спасибо за ответы. Что касается языка и ОС, этот вопрос был вдохновлен тем, что я играл в Fallout, и игра зависала дважды в час, из-за чего мне пришлось перезапустить xbox, поэтому я предполагаю, что c ++.

Ответы [ 4 ]

2 голосов
/ 22 марта 2011

В среде типа Dotnet / Java довольно сложно захватить систему, потому что среда выполнения удерживает ваш код на расстоянии от ОС.

Ближе к металлу, скажем C или C ++, Assembly и т. Д.надо играть честно с остальной системой - если у вас ее нет, то уже возьмите копию Petzold и наблюдайте / экспериментируйте с количеством «стандартного» кода, чтобы запустить одно окно ...

Еще ближе, на уровне водителя могут происходить самые разные вещи ...

2 голосов
/ 22 марта 2011

Существует ряд причин, являющихся внутренними или внешними, которые приводят к заблокированному приложению, более общий случай - это когда программа запрашивает что-то, но не приводится, что приводит к бесконечному ожиданию, практический пример - программа записывает некоторый текст в файл, но когда он собирается открыть файл для записи, этот же файл открывается любым другим приложением, поэтому запрашивающее приложение будет ждать (в некоторых случаях зависать, если не закодировано должным образом), пока не получит эксклюзивный контроль файла.

И критическое замораживание, которое приводит к перезапуску системы, - это когда запрашиваемый файл является чем-то очень важным для ОС. Однако вам может не потребоваться перезапускать систему, чтобы вернуть ее в нормальное состояние, если только программа, которая была заморожена, не написана на языке, который создает собственный двоичный файл, то есть на C / C ++, если быть точным. Поэтому, если приложение написано на языке, который работает с концепцией управляемого кода, как и любой другой язык .NET, ему не понадобится перезапуск системы, чтобы все нормализовалось.

2 голосов
/ 22 марта 2011

Миллион разных вещей.Наиболее распространенные, которые приходят на ум, это:

  1. Создание слишком большого количества потоков или процессов, что приводит к потоплению планировщика ОС.
  2. Сжатие слишком большого объема ОЗУ, которое помещает диспетчер памяти в страницувина ада.
0 голосов
/ 22 марта 2011

сбоев страниц, попытки доступа к недоступным данным или памяти (нарушение доступа), несовместимые типы данных и т. Д.

...