This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold включает в себя встроенный отладчик Lua с возможностью инспекции. Вместе со встроенными инструментами профилирования — это мощный инструмент, который может помочь найти причину ошибок в логике игры или помочь проанализировать проблемы производительности.
Самый простой способ отладить игру в Defold заключается в использовании print-отладки, или трассировки. Используйте операторы print() или pprint() для наблюдения за переменными или для индикации хода выполнения. Если игровой объект без скрипта ведет себя странно, можно просто прикрепить к нему скрипт с единственной целью отладки. Использование любой из функций печати приведет к выводу в Console в редакторе и в лог.
Помимо печати, движок может рисовать на экране отладочный текст и прямые линии. Это делается путем отправки сообщений в сокет @render:
-- Нарисовать на экране значение "my_val" с отладочным текстом
msg.post("@render:", "draw_text", { text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0) })
-- Нарисовать цветной текст на экране
local color_green = vmath.vector4(0, 1, 0, 1)
msg.post("@render:", "draw_debug_text", { text = "Custom color", position = vmath.vector3(200, 180, 0), color = color_green })
-- Нарисовать на экране отладочную линию между игроком и врагом
local start_p = go.get_position("player")
local end_p = go.get_position("enemy")
local color_red = vmath.vector4(1, 0, 0, 1)
msg.post("@render:", "draw_line", { start_point = start_p, end_point = end_p, color = color_red })
Сообщения визуальной отладки добавляют данные в пайплайн рендеринга и отрисовываются как часть обычного рендер пайплайна.
"draw_line" добавляет данные, которые выводятся с помощью функции render.draw_debug3d() в рендер-скрипте."draw_text" рендерится с помощью /builtins/fonts/debug/always_on_top.font, который использует материал /builtins/fonts/debug/always_on_top_font.material."draw_debug_text" это то же самое, что и "draw_text", но отображается в пользовательском цвете.Следует отметить, что, вероятно, потребуется обновлять эти данные каждый кадр, поэтому размещение сообщений в функции update() является хорошей идеей.
Выберите Debug ▸ Start/Attach, чтобы либо запустить игру с уже подключенным отладчиком, либо подключить отладчик к уже запущенной игре.

Как только отладчик подключен, можно контролировать выполнение игры через кнопки управления отладчиком в консоли или через меню Debug:


end ниже строки с вызовом функции nextspawn():

Строка Lua-кода не соответствует одному выражению. Шаг в отладчике перемещается вперед по одному выражению за раз, что означает, что в настоящее время для перехода к следующей строке может потребоваться нажать кнопку шага несколько раз.
nextspawn():


Чтобы установить или убрать точку останова, кликните в колонке справа от номеров строк в редакторе кода. Также можно выбрать в меню Edit ▸ Toggle Breakpoint.


Чтобы отредактировать условие точки останова, щёлкните правой кнопкой мыши в колонке справа от номеров строк в редакторе кода или выберите Edit ▸ Edit Breakpoint в меню.

В настоящее время нет возможности изменять переменные через функцию вычисления.

При работе с несколькими точками останова в разных скриптах вкладка Breakpoints предоставляет централизованное место для управления всеми точками останова.
Для работы с отдельными точками останова:
Выберите несколько точек останова с помощью Ctrl/Cmd+щелчка или Shift+щелчка, затем щёлкните правой кнопкой мыши, чтобы выполнить массовые действия. Можно одновременно редактировать условия для нескольких точек останова, переключать их активное состояние или полностью удалять их.
Кнопки на панели инструментов позволяют разом включить, отключить или переключить все точки останова. Это полезно, если вы хотите запустить игру без остановок, но не хотите терять уже расставленные позиции точек останова. Когда отладочная сессия закончена, можно так же удалить их все сразу.
Lua поставляется с библиотекой отладки, которая полезна в некоторых ситуациях, особенно если необходимо исследовать внутренности окружения Lua. За подробностями обращайтесь к главе о Debug Library в руководстве Lua.
Если вы столкнулись с ошибкой или если ваша игра ведет себя не так, как ожидалось, вот контрольный список для отладки:
Проверьте вывод консоли и убедитесь в отсутствии ошибок времени выполнения.
Добавьте операторы print в код, чтобы убедиться, что код действительно выполняется.
Если он не запускается, проверьте, правильно ли вы выполнили настройки в редакторе, необходимые для запуска кода. Добавлен ли скрипт к нужному игровому объекту? Приобрел ли скрипт фокус ввода? Правильны ли триггеры ввода? Добавлен ли код шейдера к материалу? И т.д.
Если код зависит от значений переменных (например, в выражении if), либо примените print к этим значениям там, где они используются или проверяются, либо проверьте их с помощью отладчика.
Иногда поиск ошибки может быть сложным и трудоемким процессом, требующим от вас пройтись по коду бит за битом, проверяя все, сужая круг неисправного кода и устраняя источники ошибок. Лучше всего для этого подходит метод под названием “разделяй и властвуй”:
Удачной охоты!
Если возникли проблемы с физикой и столкновения работают не так, как ожидалось, рекомендуется включить отладку физики. Отметьте опцию Debug в секции Physics файла game.project:

Когда эта опция включена, Defold отрисовывает все формы и контактные точки столкновений:

Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB