Table of Contents

Журнал и диагностика

Когда что-то работает не так, как сказано в разметке, IcyUI сообщает об этом двумя способами: предупреждениями в журнале — о проблемах, которые можно назвать (несуществующий шрифт, опечатка в пути привязки), — и отладочными инструментами поверх работающей игры — для проблем, которые нужно увидеть (элемент не того размера, фокус не там).

Журнал

IcyUI пишет журнал через Microsoft.Extensions.Logging — стандартные интерфейсы журналирования .NET. С настройками движка по умолчанию сообщения попадают в окно Output отладчика в MonoGame и в журнал Stride (игровую консоль и вывод Game Studio) в Stride. По умолчанию записываются только предупреждения и более серьёзные сообщения.

Событие Уровень Значение
1001 Warning Для семейства не загружено ни одного шрифта, поэтому текст с ним использует резервный.
1002 Warning Не удалось импортировать системный шрифт.
1003 Debug Файл в папке системных шрифтов не читается как шрифт и пропущен.
1004 Warning Нет шрифта по умолчанию для текста без FontFamily.
2001 Warning Путь привязки называет член, которого нет у источника.
2002 Warning Контекст данных привязки не соответствует её x:DataType; она переходит на динамический путь.
3001 Warning Сборку не удалось полностью просмотреть в поисках типов для разметки.
4001 Warning Для ключа и языка нет локализованной строки; показывается сам ключ.
4002 Warning Файл локализации не читается; он пропускается, как будто его нет.

Каждое сообщение записывается один раз на причину, а не каждый кадр.

Куда направить журнал

Раздел журнала в конфигурации принимает минимальный уровень, дополнительных поставщиков или целиком вашу фабрику журналов:

// Sends IcyUI's messages to your own logging (Serilog, the console, ...) through any ILoggerProvider.
public static StrideIcyHost SetUpWithLogging(IGame game, ILoggerProvider provider) =>
    game.UseIcyUI(ui => ui.ConfigureLogging().AddLoggerProvider(provider));
  • ConfigureLogging(LogLevel.Information) понижает порог (см. Конфигурация);
  • AddLoggerProvider(provider) добавляет любой ILoggerProvider: Serilog, NLog, консоль или свой;
  • UseLoggerFactory(factory) передаёт IcyUI уже существующую в игре ILoggerFactory, чтобы его сообщения попадали в ваш журнал с вашими фильтрами.

Отладочные инструменты

Canvas может рисовать поверх интерфейса отладочные инструменты. Они включаются по имени в ActiveDebugTools:

Инструмент Показывает
"Bounds" Границы внешнего отступа, рамки, внутреннего отступа и содержимого каждого элемента.
"Focus" Контур вокруг элемента в фокусе.
"DiagnosticsHud" Панель со временем кадра и FPS, памятью и элементом в фокусе.

IcyUI не назначает им клавиш; назначьте свои, например в отладочной сборке:

// F1 toggles the layout boxes, F2 the diagnostics panel (frame time, memory, focused element).
public static void BindDebugKeys(IIcyHost ui)
{
    void Toggle(string tool)
    {
        if (!ui.MainCanvas.ActiveDebugTools.Remove(tool))
            ui.MainCanvas.ActiveDebugTools.Add(tool);
    }

    ui.Configuration.Input.Events.RegisterCommand(new RelayCommand(() => Toggle("Bounds")), new KeyGesture(Keys.F1));
    ui.Configuration.Input.Events.RegisterCommand(new RelayCommand(() => Toggle("DiagnosticsHud")), new KeyGesture(Keys.F2));
}

Типичные ошибки

  • В MonoGame без отладчика журнала нет. Поставщик по умолчанию пишет только при подключённом отладчике; добавьте своего поставщика, чтобы журнал вёлся и при обычном запуске игры.
  • Для работающей привязки ничего не записывается. Предупреждение 2001 появляется, только если члена не существует; привязка к свойству, которое никогда не вызывает PropertyChanged, молчит. См. Привязка данных.

См. также