Внутренняя консоль логирования - шаг к стабильному технодемо
Помимо обычных методов отладки, такие как отладка в Visual Studio и вывод текста на экран, в какой-то момент стало ясно, что их недостаточно.
По мере усложнения систем стало труднее быстро находить конкретные объекты в памяти, отслеживать состояние внедрённых функций и разбирать причины сбоев. Обычный стек вызовов не всегда даёт полную картину того, что происходило внутри игрового цикла непосредственно перед крашем.
Первым шагом стало создание вспомогательных окон с отладочной информацией через API ReShade:
Теперь я могу привязать вывод к выделенному юниту и одним нажатием скопировать адрес соответствующей структуры в памяти процесса. Это позволяет сразу продолжить анализ в Cheat Engine. Это значительно ускоряет процесс отладки, когда нужно найти конкретный объект среди сотен остальных.
Однако этого оказалось недостаточно. Разбор crash dump'ов вручную - медленный и неудобный процесс. Поэтому была реализована отладочная консоль.
Консоль отслеживает поток выполнения именно моего кода внутри кода игры: фиксирует вызовы внедрённых функций, их результаты и ключевые события.
Module показывает источник записи - поток игры или подключенная DLL. Это помогает выявлять ошибки многопоточности.
По Timestamp можно отслеживать проблемы производительности
Dump сохраняет содержимое каналов в текстовый файл.
А кнопка Freeze/Continue позволяет приостановить обновление консоли, чтобы "заморозить" вывод в конкретный момент времени - бывает полезно получить "срез" событий в произвольный момент.
А теперь самое интересное - три канала логирования: Current, Released и Accumulated.
Current содержит записи текущей итерации игрового цикла. В реальном времени этот канал совершенно бесполезен - он постоянно "мелькает" от быстрых обновлений. Но при краше именно здесь находится последняя запись перед сбоем.
Released хранит записи предыдущей итерации цикла. Это особенно полезно в переходных состояниях. Например, при смене меню:
Current показывает события уже нового кадра, а Released - состояние системы непосредственно до перехода. В итоге получается картина “до/после”.
Accumulated используется для редких событий - инициализация, загрузка уровня и т.д. По этому каналу можно быстро определить, на каком этапе произошёл сбой.
При вылетах игры дампы всех трёх каналов будут сохраняться автоматически. Это позволит точнее воспроизводить ошибки и ускорит их исправление - в том числе после выхода технодемо.
Вы сможете создавать багрепорты и прикладывать к ним логи в специальном канале дискорд-сервера проекта.
Эта система - не просто удобство разработки. Это инфраструктура, которая позволяет двигаться к стабильной технодемо без накопления скрытых критических ошибок и снижает риск неожиданных критических сбоев на этапе публичного тестирования.
the third prophecy
инструмент