О пользе логов и отладочных менюшек

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


лог падения игры (фрагмент, прислан по скайпу т.е. сам я даже не видел что/как/когда упало)
{262} mirror destroyedmission complete63860[i] dqs1::Game      > unloading63860[i] ResourceCache   > "TrialGroundMap" package unloaded63860[i] dqs1::Game      > unloaded[E] Exception       > attempt to read address 00000040<hr />
TextureImage::Frame::extents() +3D  at  X:/dev/Driver/video_TextureImage.cpp:184<hr />
Render2D::stretched_image() +23  at  X:\dev\Engine\Render2D\Render2D.cpp:1313<hr />
MiniMap::visualize() +1E6  at  X:\dev\App\DragonQuest\Common\dq_MiniMap.cpp:83<hr />
DQShooter1App::Mission::visualize() +BBB  at  X:\dev\App\DragonQuest\Shooter1\dqs1_Mission.cpp:1040<hr />
MultiStageApp::visualize() +12  at  X:\dev\Engine\Application\app_MultiStageApp.cpp:202<hr />
WinMain() +BCE  at  X:\dev\core\win32\_MainPC.cpp:886


Если смотреть с конца, то видно что это попыта обращения к несуществующей текстуре в атласе при рисовании мини-карты; чуть выше видно что это происходит сразу по (успешном) окончании уровня. Итого repro очевиден, т.е. известно как со 100% вероятностью воспроизвести баг (соответственно, починив его, можно будет на 100% быть уверенным что баг починен и что починен именно этот баг).

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

В итоге, больше всего времени заняла компиляция/линковка исправленной версии игры.

Мораль№1
Нужно всегда логировать не только "системные" вещи (загрузка/выгрузка рестурсов и т.п.), но и ключевые события геймплея -- это значительно ускорит отладку странных/сложных багов.
Мораль№2
Обязательно должна быть возможность быстро сделать всякие штуки по геймплею (рождение/убиение врагов, мега-дамадж, бесконечное здоровье, мгновенный выигрыш/проигрыш миссии и т.п.), иначе будет очень много времени тратится в совершенно маразматических ситуациях типа "нужно отладить такого-то врага -- стартуем игру, бежим полминуты до врага, пробуем, закрываем игру и повторяем". Как это делать -- менюшки, консоль, хоткеи -- непринципиально.

P.S.

Ну и обязательно добавить моё любимое : "отладчик -- бесполезен!" :)

Submitted by BLK Dragon on

Комментарии

Круто конечно, на движке (тем более самописанном) все можно реализовать. На конструкторах нет такой роскоши Biggrin Я например в своем проекте на 3D Rad тоже для удобства отладки использовал всякие индикаторы, показатели и манипулирование событиями, но там не всегда была возможность ссимулировать какое-то событие. Прологать баг там впринципе невозможно. Объектов могло быть много, а взаимосвязи между ними сложными, поэтому большая часть багов выискивалась собственными умозаключениями и наблюдениями, порой, мягко выражаясь, нелегкими Smile

Так что слушайте дядю выше и не ломайте себе мозг Smile

Submitted by rkamo on
Ну в хороших "готовых движках" обычно есть логи, консольные команды и прочие плюшки.

Я бы даже сказал что это не роскошь, а жизненная необходимость -- без этого попросту проект не сделать, т.к. немерянное количество времени будет уходить на всякую ерунду (а потом время и/или деньги заканчиваются и всё Smile

Submitted by BLK Dragon on
Quote:
BLK Dragon писал(а):
...Обязательно должна быть возможность быстро сделать всякие штуки по геймплею (рождение/убиение врагов, мега-дамадж, бесконечное здоровье, мгновенный выигрыш/проигрыш миссии и т.п.)...
А после релиза эти возможности начинают называться чит-кодами )

Что в свою очередь уже радует игроков.

Submitted by Victor on
> А после релиза эти возможности начинают называться чит-кодами )

> Что в свою очередь уже радует игроков.

Не. В релизе бОльшая часть этого хозяйства убивается 'ами -- просто чтобы место не занимало.

Submitted by BLK Dragon on

GameDev.by