Методы отладки в реальном времени

18

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

Я хотел бы начать взаимодействовать с моей игровой логикой во время сеанса. Как вы справляетесь с этим?

Я был бы открыт, чтобы услышать решения для iOS, C / C ++ и C # / XNA.

Дэвид Макгроу
источник

Ответы:

12

Только что обнаружил это для разработчиков iOS -

AsyncSocket
Вы устанавливаете сервер в своем приложении и подключаетесь к нему через терминал. Затем вы можете прокачать удаленные команды и начать манипулировать переменными в режиме реального времени. Довольно гладко.

Дэвид Макгроу
источник
4

Интеграция полностью интерпретируемого языка позволяет очень легко переписывать элементы игры на лету.

Python, Lua и т. Д. Все могут быть использованы специально для этого. Примером может служить Angel Engine .

Горячая загрузка - это еще один элемент для проверки (в основном, событие запускается, сообщая вам, что актив изменился - файл конфигурации, элемент искусства и т. Д.), И вы запускаете его через серию кондиционеров, которые изменяют его для окончательный формат перед заменой существующего новым.

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

А.А. Грапсас
источник
2

Что касается C ++, C # и C # с XNA, Visual Studio имеет отличные инструменты отладки - приостанавливает приложение в режиме реального времени в любой точке кода, в любое время просматривает значения, присвоенные переменным, просматривает вызовы функций , анализировать стек вызовов и многое другое. Кроме того, такие инструменты, как Pix и CLR Profiler, делают разработку с использованием языков DirectX (Pix) и CLR (CLR Profiler) великолепной.

Кроме того, одна особенно полезная часть работы с играми заключается в том, что у нас есть гигантская область для написания отладочного текста, графики и т. Д. Графики использования памяти в реальном времени, количество нарисованных объектов / вершин, частота кадров и т. Д. - это обычные вещи, которые можно нарисовать на экране.

Шон Джеймс
источник
1
Хотя VS является выдающимся инструментом разработки, обычная отладка требует времени - поиск точек останова, пошаговое выполнение кода, изменение переменных, перезапуск потока. Этот вопрос ищет немедленный способ сделать такие вещи, как переместить компонент интерфейса или настроить коэффициент атаки босса и т. Д.
Дэвид Макгроу
2

В C / C ++ простой трюк состоит в том, чтобы поместить вашу настройку в статическую переменную, вызвать точку останова, изменить статическую в отладчике, и она остается постоянной до выхода.


источник
Сделайте это статической переменной внутри функции. Если это глобальная статическая Visual Studio, возможно, не сможет показать ее значение.
Кай
2

HTTP Logging - это огромная помощь, и его не сложно запустить и запустить. Вы даже можете использовать движок Google App как быстрый способ запустить это. Данные всегда полезны.

Скрипты и XML могут быть перезагружены на лету и не требуют перезагрузки. Позвольте им потерпеть неудачу, не останавливая игру. Это дает много власти художникам, тестировщикам и дизайнерам.

Игровое меню отладки Простое игровое меню отладки, которое вы можете вызвать в детстве и заморозить игру, используя как движки движка, так и ползунки игры. Позволяет вам настраивать номера клавиш во время выполнения и, возможно, выполнять одну или две функции отладки или информационные дампы.

Я также люблю сокеты ASYNC, как упомянуто в ответе Дэвида

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

Kimau
источник
2

Я знаю, что Шон Джеймс уже сказал это . А если серьезно, Visual Studio (в частности, инструменты отладки) является потрясающим для этого.

Я не очень часто использую C ++ в эти дни, поэтому я не уверен, насколько хорошо они там применяются. Но для C # (в том числе в C # Express) у вас есть:

И это может взорвать ваш разум (он взорвал мой, когда я узнал об этом):

Немедленное окно на самом деле довольно сложно найти (оно находится в меню Debug / Windows).

Единственный существенный недостаток использования отладчика Visual C # заключается в том, что он не любит изменение constзначений. Поэтому я обычно делаю свои игровые ценности, staticпока я их настраиваю.

(Также: очень помогает наличие двух мониторов.)


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

В этих редких случаях я делаю (в XNA) просто взлом небольшого кода (возможно, используя Edit и Continue, как описано выше), чтобы захватить Keyboard.GetState().IsKeyDown()(на самом деле у меня есть для этого более простой в использовании упаковщик) и настроить значение по нажатию клавиш. Все более сложное не стоит усилий.


На практике гораздо важнее то, что я могу визуализировать (а не изменять) значения в режиме реального времени. Для этого у меня есть хороший маленький класс, который может буферизовать строки и текст, который должен быть нарисован в конце фрейма. Это также полезно для быстрого создания прототипов.

(И еще раз, приятно иметь возможность «Редактировать и продолжить» эти визуализации во время выполнения.)


(источник: andrewrussell.net )
( отсюда )

Боюсь, у меня нет «хорошего» источника для публикации в данный момент (возможно, позже). Но это в основном просто список строк (для этой библиотеки круглых строк ) и строк (для встроенного в XNA SpriteBatch). Просто сделайте это public staticгде-нибудь и нарисуйте все с соответствующим преобразованием, чтобы все появилось в «мировом пространстве» (а затем очистите списки для следующего кадра).

Эндрю Рассел
источник
1

Написание простой системы отражения для C / C ++ довольно тривиально. Таким образом, вы можете просмотреть все свои переменные в игре (будь то с помощью сетевого инструмента, клавиатуры или джойстика) и изменить их в соответствии с вашим сердцем. Это работает для меня, но все приведенные выше ответы одинаково действительны.

Отредактировано, чтобы добавить: Этот поток теперь о настройке, а не отладке согласно заголовку потока.

Кая
источник
0

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

Первоначальная настройка макросов на стороне игры, протокола сервер / клиент (решения, которые я видел, только сериализуют XML и обратно) и написание клиента, велика. Однако это чрезвычайно полезно, тем более что использование сети для связи означает, что вы можете работать на любой платформе.

tenpn
источник
0

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


источник