Unity 6.3
0 онлайн 57 гостей 3 в системе
Вход
Программирование в Unity Шаг 60 из 210

IL2CPP управляемые трассировки стеков

При возникновении исключения в управляемом коде стековый трек для исключения может помочь вам понять причину исключения. Однако, управляемый трек стека может в некоторых случаях отображаться не так, как ожидалось. Трек стека зависит от конфигурации сборки.​

C++ конфигурация компилятора

Вы можете установить конфигурацию компилятора C++ для сборок IL2CPP одним из следующих способов:

  • Через меню Настройки Игрока в Редакторе. Выполните следующие действия, чтобы изменить скриптовый сервер через меню Настройки Игрока:

    1. Перейдите в Изменить > Project Настройки.
    2. Нажмите на кнопку Настройки Игрока, чтобы открыть Игрок settings для текущей платформы в Inspector.
    3. Перейдите в раздел Конфигурация в подменю Другие настройки.
    4. Установите свойство C++ Настройка компилятора на Отладка, Выпускили Мастер.
  • Из кода, по вызову PlayerSettings.SetIl2CppCompilerConfiguration со значением от Il2CppCompilerConfiguration enum.

Эти параметры имеют следующие последствия для управляемых трассирований стеков:

  • Отладка: IL2CPP сообщает о надежном управляемом стеке и включает каждый управляемый метод в стек вызова. Трек стека не включает номера строк из исходного кода C#.​
  • Выпуск или Мастер: IL2CPP может произвести стек вызова, который отсутствует один или более управляемых методов. Это происходит, когда C++ компилятор вставляет отсутствующие методы. Вставление методов обычно повышает производительность во время выполнения, но может затруднить понимание стеков вызовов.

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

IL2CPP информация о трассировке стека

Можно настроить IL2CPP для включения сведений о номерах файлов и строк в управляемые трассировки стеков одним из следующих способов:

  • С помощью настроек Проигрывателя в Редакторе: Изменить > Project Настройки > Проигрыватель > Другие Настройки. Затем, под заголовком Конфигурация, установите свойство IL2CPP Stacktrace Information на Имя Метода, Имя Файл и Номер Стороны.
  • Из кода, вызвав PlayerSettings.Il2CppStacktraceInformation с Il2CppStacktraceInformation.MethodFileLineNumber в качестве значения параметра.
Свойство IL2CPP Stacktrace Information, установленное на Имя метода, Имя файла и Номер строки
Свойство IL2CPP Stacktrace Information, установленное на Имя метода, Имя файла и Номер строки

Эта настройка указывает IL2CPP включать все кадры управляемого стека в стек вызова. Каждый кадр стека также включает соответствующий номер строки C#, если управляемый файл символов (.pdb) доступен для управляемой сборки (.dll), в которой существует этот код.

При включении этой функции немного увеличивается время сборки и окончательный размер построенной программы. Процесс сборки Player включает дополнительный шаг, который обрабатывает файлы символов отладки и генерирует новый файл данных, который включает необходимое формирование символов. Unity отправляет этот файл данных с построенным Player и использует его во время выполнения для определения информации о строке C# в стеках вызовов.

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

Отладка скриптов

Чтобы включить Отладку Скриптов, перейдите в Файл > Профили Создания и затем установите флажок Отладка Скриптов. Когда отладка скриптов включена, IL2CPP сообщает правильный управляемый трек стека с методом, файлом и номером строки. Это приводит к увеличению размера программы и снижению производительности.

Тип: Если требуется только улучшить трассировку стеков, не включайте отладку скриптов. Вместо этого включите номера строк исходного кода как описано выше.

Дополнительные ресурсы