Минами играла в Бурить-Копать! и в какой-то момент её бур просто завис в воздухе, перестал ехать и управляться. Очевидно, вылетел эксепшен, но какой и почему? Мы много тестировали игру до и после, и такого бага не было.
Огромное спасибо Минами за то, что она скинула нам логи игры. По стэк трейсу стало понятно, что вылетел
NullReferenceException в момент генерации мира на основе шаблона. Но номера строки или id проблемного шаблона в логах не было, а метод довольно большой и теоретически проблемных мест несколько.Окей, выкручиваю шанс шаблона на 100%, настраиваю генерацию мира на 1000 клеток вперед и начинаю генерить уровень за уровнем.
Не сразу, но получилось поймать баг, и вот что выяснилось. У нас в шаблонах есть элемент «любое доступное на конкретной глубине топливо». А из-за неправильных настроек топлива (интервалы были
[0,300),[301,600) ), так получилось, что на 300 глубине не было ни одного топлива. И поэтому, когда конкретный шаблон попал именно на 300 глубину, случилась ошибка.Так мне это баг не понравился, что я его исправил сразу в 3 местах:
1) Поправил сами настройки топлива
2) Повесил
[CanBeNull] на методы, которые возвращают «любое доступное на конкретной глубине топливо» и исправил использующий их код, чтобы он это учитывал.3) Завернул код, генерирующий блок по шаблону, в try/catch, с фоллбеком в стандартную генерацию и логированием id проблемного шаблона.
#бурить_копать #программирование