Инструменты отладки
Быстрое управление
~ (Tilde) - переключает консоль отладки, из которой запускается множество команд. Используйте list, чтобы увидеть список команд. Используйте help someCommand, чтобы получить информацию о команде. Команде list также можно передать фильтр, вот так: list show.
F3 - переключает оверлей отладки. Содержит много полезной информации о сети, рендеринге и другом состоянии игры. Наводите мышь на сущности и области, чтобы увидеть такие вещи, как id сущности, id сетки, координаты и многое другое.
F5 - переключает окно спавна сущностей
F6 - переключает окно спавна тайлов
B - переключает окно песочницы
Shift + F4 - переключает UI
Просмотр переменных
View Variables или сокращённо VV - это инструмент для просмотра и изменения переменных объектов. Вы можете открыть VV для объекта командой vv или через действие правой кнопкой мыши.
Вы также можете использовать команды vvread, vvwrite и vvinvoke, чтобы работать с VV прямо из консоли.
Параметры, которые принимают команды vv:
vv /path/to/an/object откроет VV по введённому вами пути. Смотрите автодополнение команд, чтобы увидеть все возможности.
vv <IoC Interface>, например vv IPlayerManager, откроет VV клиентского IoC-объекта.
vv S<IoC Interface>, например vv SIPlayerManager, откроет VV серверного IoC-объекта.
vv CE<Entity System>, например vv CEPhysicsSystem, откроет VV клиентской сущностной системы.
vv SE<Entity System>, например vv CSPhysicsSystem, откроет VV серверной сущностной системы.
vv <EntityUid> откроет VV сущности. И на клиенте, и на сервере сразу.
vv guihover откроет VV текущего элемента GUI под мышью.
Окно разработчика
devwindow открывает дополнительное окно, содержащее растущее число полезных инструментов отладки и разработки:
- Дополнительная консоль отладки
- Древовидный просмотр UI
Запуск тестов
Серверный GC
Рекомендую включить серверный GC для запуска тестов SS14, особенно интеграционных тестов (это сокращает время интеграционных тестов вдвое).
Чтобы включить его в различных редакторах:
Rider
Unit Testing -> Test Runner и добавьте переменную окружения COMPlus_gcServer=1

dotnet test
Передайте -e COMPlus_gcServer=1 в команду dotnet test
Visual Studio
Кто-нибудь, кто пользуется VS, пожалуйста, заполните это
Скриптинг
Скриптинг позволяет запускать интерактивный REPL C# прямо внутри игры! Вы можете запускать скрипты как на сервере, так и на клиенте. Учтите, что скриптинг отключён в релизных сборках клиента из соображений размера и безопасности, и, очевидно, для его использования на сервере нужны права уровня хоста.
Чтобы открыть скриптинг, есть две команды: csi и scsi. Первая - на клиенте, вторая - на сервере. Также есть watch, который показывает вывод списка команд каждый кадр (как окно watch в вашем отладчике).
Смотрите эту ссылку для ознакомления (наверное).
Глобальные переменные по умолчанию, которые вы можете использовать, определены в IScriptGlobals как на клиенте, так и на сервере. Полезные из них: vv на клиенте, res<T>() для быстрого разрешения IoC и т. д…
Тестирование лобби
По умолчанию сервер запускается в режиме “без лобби”. Это означает, что лобби отключено и при подключении к серверу вы попадаете прямо в игру. Это, конечно, удобно для тестирования, но если вы хотите по-настоящему протестировать лобби, вы можете себе представить, почему это раздражает.
Чтобы включить лобби, нужно установить переменную конфигурации game.lobbyenabled в true. Есть несколько способов сделать это:
- Отредактируйте файл конфигурации сервера в папке bin сервера и добавьте
lobbyenabled=trueв раздел[game]. - Передайте
--cvar game.lobbyenabled=trueкоманде, которой вы запускаете игру. - Измените переменную во время игры, выполнив
cvar game.lobbyenabled trueв консоли сервера. Если вы подключились до этого, вам придётся возродить своего персонажа, чтобы попасть в лобби.
Если вы используете Rider, я бы рекомендовал создать отдельную конфигурацию запуска (см. ниже) с --cvar game.lobbyenabled=true.
Чтобы быстро проверить лобби с более лёгкой настройкой, golobby завершит раунд, включит лобби и отправит вас в предраундовое лобби. Вы можете пропустить таймер до следующего раунда с помощью forcepreset sandbox (или любого другого желаемого режима игры.)
Продвинутое использование консоли
sudoпозволяет вам выполнять команды от имени консоли сервера со своего клиента. Большинство админских команд (таких какban) автоматически отправляются на сервер, если у вас есть разрешение на их использование, но некоторые команды управления сервером, такие какcvar, обычно можно выполнить только из консоли сервера. Вот тут-то и нуженsudo. Конечно, для этого требуется+HOST.exec <file>позволяет выполнять файлы скриптов в каталоге пользовательских данных (%appdata%/space station 14/dataдля клиента или аналогично в зависимости от ОС, папкаdataрядом с исполняемым файлом для сервера). Вы можете создать скриптlobby, который автоматически перезапускает раунд в лобби, а затем запустить его так:exec lobby:
sudo cvar game.lobbyenabled 1
restartroundnow
Разные полезные команды консоли
Вот несколько полезных команд консоли и то, что они делают. Это далеко не исчерпывающий список. Чтобы увидеть все команды консоли, используйте list.
guidump- выгружает полный дамп дерева GUI в текстовый файл%APPDATA%/Space Station 14/guidump.txt(Windows),~/Library/Application Support/Space Station 14/guidump.txt(macOS) или~/.local/share/Space Station 14/guidump.txt(Linux, да, он использует переменные окружения базовых каталогов XDG).showrays- переключает отладочную отрисовку физических лучей. Принимает параметр времени жизни лучей.showbb- визуализирует ограничивающие рамки и сетки. Сетки показываются как синие объёмы, их границы - как красные линии. Ограничивающие рамки показываются красными линиями.physics shapes- показывает точные коллизионные оболочки объектов. Очень полезно, если вы пытаетесь настроить структуру с необычной формой.dumpentities- выгружает список сущностей с UID и прототипами.debugai- используется для подсказок над головами мобов (сейчас охватывает как мышление, так и поиск пути для конкретного моба).pathfinder- охватывает общий поиск пути, который сейчас представляет собой граф, маршруты, узлы (особенно полезно для JPS).togglelight- переключает отрисовку света. Полезно для маппинга.net_graph- включается командойnet_graph 1, выключается командойnet_graph 0. Показывает график использования сети.tp- телепортирует игрока в любое место. Использование:tp <x> <y> [<MapId>].aghost- переключает режим админского призрака для быстрого исследования карты.restartroundnow- если вы не работаете над экраном завершения игры, обычно именно то, чем стоит завершать раунд. Перезапускает раунд без минутного ожидания.restartround- перезапускает раунд так, как он обычно заканчивается, отправляя игроков обратно в предраундовое лобби.restart- полностью перезапускает сервер.launchauth- загружает токены аутентификации из настроек вашего лаунчера при запуске с клиента. Вы можете выполнить это перед подключением к серверу, чтобы легко включить и протестировать аутентификацию из dev-сборок.deadmin- если вы работаете над чем-то, что ведёт себя по-разному для админов и не-админов, например чатом, убедитесь, что вы вручную сняли админку, чтобы гарантировать, что это работает и для обычных игроков.
Используйте конфигурации запуска
Если вы используете Rider, выжмите максимум из конфигураций запуска, чтобы быстро переключаться между тестируемыми сценариями. Это тем более необходимо, если вам нужно чередовать тестирование различных сценариев, таких как разные бэкенды баз данных, но проявите изобретательность. Например, вот конфигурации запуска, которые есть у меня на момент написания:

Вы можете использовать --cvar или +command, чтобы изменять конфигурацию сервера и автоматически выполнять команды для лёгкой настройки тестовых сред. Если хотите, поищите идеи в остальной части этой страницы.
Отладка производительности
По умолчанию Rider отключает оптимизации у всех сборок при запуске через отладчик. Это означает, что даже код BCL (System) будет работать гораздо медленнее, чем мог бы. Это может сделать запуск чего-либо в отладчике довольно болезненным.
Вы можете отключить это, сняв галочку с этого чекбокса в Settings -> Build, Execution & Deployment -> Debugger:

Внешние инструменты
- renderdoc - идеален для отладки движка рендеринга и шейдеров.