Войти
ПрограммированиеФорумОбщее

Почему не обрабатывается Exception

#0
8:37, 31 июля 2020

Всем привет.
Использую Unity 2019.3.9f1 + Microsoft Visual Studio 2019

Иногда, когда возникает Exception (например при обращению к неинициализированной переменной) скрипт останавливает выполнение без сообщений в лог

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

Когда это случается приходится упорно по шагам залезать во все функции и смотреть где скрипт грохнется, утомляет.

Есть подозрение что это из-за использования асинхронности, но это не точно.

У кого-нибудь было похожее?


#1
21:45, 31 июля 2020

В студии есть окно Exception settings и там можно поставить флаги на какие исключения останавливать выполнение.
Если не знаешь что за исключение, то ставь все.

#2
23:43, 31 июля 2020

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

#3
4:55, 1 авг. 2020

Может кривые com-библиотеки подключены. Они могут попортить память. На C# память портить очень трудно, но там внутри не С#.

#4
9:48, 1 авг. 2020

По-моему, юнька может не выводить в лог, если ошибка возникла не в основном потоке.

#5
12:15, 1 авг. 2020

Zab
Эта проблема как на рабочем компе, так и на домашнем, и мне даже сложно представить в чем проблема - в студии или в юнити

lol
Еще бы узнать как это можно пофиксить)

#6
15:16, 1 авг. 2020

В студии ты можешь подключать нешарповские библиотеки одним движением мыши. Автоматически добавляется переходник. Написано оно чаще всего на С++, хотя может быть на чем угодно. Если писавший не сильно хороший в программировании, он накосячить может запросто так, что все после него рушится. Рушиться может совсем не в том месте, где проблема, а некоторое время после порчи. Иногда везет и ты получаешь таки исключение "access violation", которое можно поймать, если очень постараться. Но испортиться может и так, что никакого исключения не будет, а если будет, то увидишь, что в том месте нет проблемы, вылетит в пострадавшем от разрушения модуле, а не в виновнике.

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

ПрограммированиеФорумОбщее