Почему может зависать программа

В Unity зависает редактор. Если сбилдить программу(под вин), то она тоже зависает(no responding). Не могу найти причину: выполняю неопределенное количество раз одно и тоже действие и потом зависание. Поставить breakpoint не могу потому, что не ясно где их ставить. Мне кажется, что зависает где-то в скриптах юнити. Как можно получить место в котором программа зависает?

Можно ли посмотреть какой то журнал где выписаны все действия программы? Я думаю что где-то получается бесконечный цикл, хотя я все циклы проверил. Спасибо!

Отслеживать
70.5k 12 12 золотых знаков 87 87 серебряных знаков 179 179 бронзовых знаков
задан 22 дек 2016 в 16:30
Valera Kvip Valera Kvip
2,667 10 10 серебряных знаков 24 24 бронзовых знака
А MonoDevelop есть?

Теоретически должно работать форсированный break. а-ля youtu.be/X8aw1n1ZJQo
22 дек 2016 в 18:11
22 дек 2016 в 19:49

по идее у студии тоже есть break all , который тоже должен останавливать в месте зависания. но чет не всё так просто видимо там. в итоге через моно схватилось? а то, что в блоге в первой ссылке написано не пробовали?

Когда компьютер зависает

22 дек 2016 в 19:51
22 дек 2016 в 19:59

Всё. Теперь будет читабельно (я думаю). Специально перенес всё в ответ. Думаю это будет нужная и важная штука тут

23 дек 2016 в 9:46

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Есть минимум три решения (если есть другие — дайте знать): два быстрых и одно долгое. Причем долгое связанно именно с Visual Studio (почему у Microsoft не может быть всё просто?)

Наибыстрейшее (но материально затратное)

Нужно пойти в UnityAssetStore и найти ассет (asset) под названием Panic Button. Он находится в разделе Editor Extensions/System. На данный момент этот ассет находится вот здесь.

Что он делает? Когда приложение крутится в бесконечном цикле и интерфейс Unity висит, достаточно нажать клавиши Shift + Esc и происходит «обрыв» главного потока, интерфейс отвисает. При этом проигрывание ставится на паузу, а в консоли отображается проблемное место:

введите сюда описание изображения

Как конкретно она работает? Что происходит внутри? Скорее всего то, что будет описано в пункте №3, только сделанное в виде скрипта, упакованного в dll (чтоб никто не видел код ), подключаемую к проекту.

Использовать MonoDevelop

  • Пишем скрипт с бесконечным циклом, вешаем на объект и нажимаем Play 🙂
  • Идем в MonoDevelop и нажимаем Run → Attach To Process введите сюда описание изображения
  • В появившемся окне выбираем Unity и нажимаем Attach введите сюда описание изображения
  • Нажимаем кнопку Pause в MonoDevelopвведите сюда описание изображения
  • Mono уже остановится в проблемном месте и высветится StackTrace введите сюда описание изображения
  • Остается теперь поставить Breakpoint на строку, изменить значение, которое вводит в бесконечный цикл (в данном случае присвоить i значение 20, например) и нажать Continue Execution введите сюда описание изображения
  • Вздохнуть с облегчением.
Читайте также:
В какой программе можно сделать счет на оплату

Компьютер намертво зависает. Все методы решения проблемы!

Использовать Visual Studio

    Пишем скрипт с бесконечным циклом, вешаем на объект и нажимаем Play 🙂 Например скрипт такой:

using UnityEngine; public class Quicksand : MonoBehaviour < void OnMouseDown() < while(true) < // «Mind you, you’ll keep sinking forever!!», — My mom >> >

  • Идем в Visual Studio, нажимаем в меню Debug → Attach to Process и выбираем в списке процессов Unity. Заметка (!): Именно Attach to Process , а НЕ Attach To Unity
  • Далее нажимаем Debug → Break all , чтоб остановить процесс
  • Нужно найти дизассемблированный вид (если он автоматически не появился). В теории на вкладке StackTrace если нажать два раза ЛКМ , то появится окно, в котором можно нажать ссылку view disassemblyвведите сюда описание изображения И через стэк попасть в место зависания. Анимация ниже должна полностью показать, как пробраться туда:
  • В итоге получаем примерно следующую картину: введите сюда описание изображения Из него практически видно бесконечный цикл. В реальности код может быть сложнее и будет трудно быстро разобрать, что там происходит, но сильно можно не вникать, ибо есть небольшой трюк (см. следующий шаг):
  • F10 — сделать шаг в отладке, не заходя в функцию/метод. Соответственно, теперь пошагово нажимаем F10 , пока не перелетим со строки 000000001015A758 jmp 000000001015A743 на строку с инструкцией cmp dword ptr [r11], 0 . введите сюда описание изображения В итоге во вкладке Autos в Visual Studio должны появится данные значения: введите сюда описание изображения
  • Теперь просто меняем значение «переменной» R11 на ноль (0)
  • Так как мы стоим на адресе cmp , то при попытки исполнить инструкцию, она попытается прочитать address 0, что, в свою очередь, сгенерирует ошибку. Что мы делаем: Нажимаем F5 (продолжить выполнение программы), а затем во всплывающем окне выбираем Continue . введите сюда описание изображения
  • В теории, Unity должна ожить и плюнуть в консоль ошибку, указав, где была загвоздка: введите сюда описание изображения
  • Вздохнуть с облегчением.
  • введите сюда описание изображения

    P.S. Способ с Visual Studio был позаимствован в блоге Unity. Там же можно прочитать, почему способ работает

    Источник: ru.stackoverflow.com

    По какой причине компьютер может зависать при переключении между программами?

    По какой причине компьютер может зависать при переключении между программами?

    Вы наверняка сталкивались с ситуацией, когда при выполнении нескольких задач на компьютере в один момент времени приходиться долго ждать, пока компьютер откликнется на ваши действия и переключится между рабочими окнами приложений. Если такое происходит, у вас может быть несколько способов разрешить эту ситуацию, в зависимости от сложившихся условий. Слабые ресурсы системы, недостаточное место на жестком диске и даже вирусы могут быть причиной медленной реакции компьютера на ваши действия.

    Недостаточная производительность процессора

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

    Читайте также:
    Триколор ТВ сколько программ

    Недостаток оперативной памяти

    Подобно производительности процессора, объем оперативной памяти компьютера также имеет ограничения. Оперативная память, также как и процессор, принимает участие в обработке данных, формируемых открытыми приложениями и службами. Память RAM хранит эти данные до тех пор, пока они не будут сохранены на постоянное записывающее устройство (жесткий диск) или пока активное приложение не будет закрыто. Переполненный модуль оперативной памяти не может функционировать, активируя использование более медленной виртуальной памяти, расположенной на дисках HDD или SSD, для поддержания работы приложений.

    Скорость жесткого диска

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

    Длительность непрерывной работы компьютера

    Если компьютер работает круглосуточно без выключений, то это хороший повод для нестабильной работы операционной системы и внутренних компонентов системы. Когда вы выключаете компьютер, все компоненты охлаждаются, оперативная память освобождается, а при новой загрузке устанавливаются все необходимые обновления. Большинство проблем и глюков вместе с перезагрузкой уходит. Но учтите, что для устранения проблем следует выполнять штатное выключение компьютера через операционную систему, а не с помощью кнопки «RESET». В тоже время не стоит злоупотреблять постоянным выключением компьютера – это приводит к вредному влиянию колебаний тока на электронные компоненты.

    Источник: kompik63.ru

    Почему зависает игра на компьютере и что делать, если игра намертво зависла?

    Почему зависает игра на компьютере и что делать, если игра намертво зависла?

    Игры на компьютере могут зависать по разным причинам – от проблем с оборудованием до ошибок в программном обеспечении. В этой статье мы рассмотрим самые распространенные причины, по которым игры могут зависать, а также расскажем, что делать, если игра намертво зависла. Дополнительно представим несколько рекомендаций, которые снизят вероятность зависания игр и с высокой долей повысят производительность ПК во время кратковременных и длительных игровых сессий. Надеемся, что приведенная информация окажется для вас полезной и позволит наслаждаться любимыми играми без периодических лагов и зависаний.

    Почему зависает игра на компьютере?

    Зависания игр могут объясняться десятками причин, но в статье мы рассмотрим только основные (наиболее вероятные) причины зависаний. 1. Несовпадение системных требований Одной из самых распространенных причин зависания игр является несовпадение системных требований.

    Если ваш компьютер не соответствует минимальным или рекомендуемым системным требованиям игры, это может привести к проблемам с производительностью, включая зависания и задержки. 2. Перегрев комплектующих ПК Перегрев компьютера может вызвать проблемы с производительностью и даже повредить вашу систему.

    Если видеокарта или процессор перегреваются, они могут автоматически снижать свою производительность (чтобы предотвратить поломку), что может привести к зависанию игр. 3.

    Заражение компьютера вирусами Вирусы и другое вредоносное программное обеспечение могут использовать ресурсы вашего компьютера, что может привести к проблемам с производительностью и зависаниям игр. 4. Загруженность центрального процессора Если ваш процессор перегружен, это может привести к проблемам с производительностью.

    Читайте также:
    Характеристика программ инклюзивного образования

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

    Неправильные графические настройки Если графические настройки в вашей игре слишком высоки для вашего компьютера, это может привести к проблемам с производительностью и зависаниям игр. 7. Плохая оптимизация Некоторые игры просто плохо оптимизированы. Это может привести к проблемам с производительностью даже на мощных компьютерах.

    Что делать, если игра намертво зависла?

    Если ваша игра намертво зависла, есть несколько шагов, которые вы можете предпринять. 1. Закрыть окно игры на панели задач Первый и самый простой шаг – это попытаться закрыть окно игры на панели задач.

    Для этого сверните игру (можно использовать комбинации клавиш Alt + Tab или Win + D), щелкните правой кнопкой мыши на значке игры на панели задач и выберите «Закрыть окно». 2. Закрыть процесс через Диспетчер задач Если предыдущий вариант не сработает, можно попробовать закрыть процесс игры через Диспетчер задач.

    Для этого нажмите Ctrl + Shift + Esc, чтобы открыть Диспетчер задач. Затем найдите процесс игры, щелкните на нем правой кнопкой мыши и выберите «Завершить процесс». Аналогично можно закрывать не только игры, но и другие программы (пример – на прилагаемом изображении). 3.

    Перезагрузка компьютера Если ни один из этих методов не сработает, последним средством станет перезагрузка компьютера. Это действие закроет все текущие процессы.

    Что сделать, чтобы игра не зависала?

    • Обновите драйверы видеокарты. Такое решение наверняка улучшит проблемы с производительностью ПК во время игровых сессий.
    • Проверьте ПК на наличие вирусов. Используйте антивирус, чтобы избавиться от вирусов и прочих вредоносных программ.
    • Проверьте температуру компонентов ПК. Если они перегреваются, установите более качественную систему охлаждения.
    • Уменьшите настройки игры. Графика будет хуже, зато игра станет работать стабильнее, особенно если конфигурация ПК хуже, чем рекомендует разработчик игры.
    • Улучшите конфигурацию ПК. Добавьте объем оперативной памяти, установите более производительные модели процессора и видеокарты.
    • Установите последние обновления для игры и ОС. Обновления убирают многие ошибки программного характера, потому, при наличии обновлений, обязательно их установите.

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

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

    Заключение

    Зависание игр может быть вызвано множеством причин. Если ваша игра намертво зависла, следуйте приведенным нами рекомендациям, чтобы ее закрыть. Если проблемы продолжаются, вы можете попытаться обновить драйверы, проверить систему на наличие вирусов, убедиться, что ваш компьютер не перегревается и выполнить прочие наши рекомендации. Комплексный подход позволит избавиться от имеющейся проблемы и предотвратить зависания игр в долгосрочной перспективе.

    Источник: digitalsquare.ru

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru