Unity предоставляет несколько вариантов отладки в Windows для криминалистической или оперативной отладки игр и процессов редактора.
Собственная и управляемая отладка
Unity поддерживает два типа отладки: собственную отладку C++ и управляемую отладку C#.
Встроенная отладка
Собственная отладка сохраняет символы в файлах pdb для связанных двоичных файлов, таких как exe и dll.
Управляемая отладка
В Windows стандартные управляемые символы .NET хранятся в файлах pdb.
Символы
Unity предоставляет хранилище символов по адресу http://symbolserver.unity3d.com/. Подобно хранилищу символов Microsoft, вы можете использовать URL-адрес сервера Unity в отладчике Windows (WinDbg) или Visual Studio 2019 и более поздних версиях для автоматического разрешения и загрузки символов.
Настройка WinDbg
Чтобы добавить хранилище символов в WinDbg, используйте команду .sympath:
.sympath+ SRV*c:\symbols-cache*http://symbolserver.unity3d.com/
Где:
.sympath+
Добавление + оставляет существующий путь символа в покое и добавляет этот поиск в хранилище символов.
SRV*c:\symbols-cache
SRV указывает удаленный сервер, с которого следует выполнять выборку, аc:\symbols
— это локальный путь для кэширования загруженных символов и их просмотра перед повторной загрузкой.
*http://symbolserver.unity3d.com/
Путь к хранилищу символов для извлечения.
Настройка Visual Studio
- Выберите Инструменты > Параметры.
- Разверните раздел Отладка и выберите Символы.
- Укажите каталог кэша, если он еще не указан.
- Добавить расположение файла символов (.pdb) (http://symbolserver.unity3d.com/).
Отладка в реальном времени
Живая отладка — это сценарий подключения отладчика к нормально работающему процессу или к процессу, в котором было перехвачено исключение. Чтобы отладчик знал, что происходит, символы должны быть включены в сборку с помощью шагов, описанных выше. Кроме того, исполняемый файл игры называется в соответствии с названием вашей игры, поэтому у отладчика могут возникнуть проблемы с поиском правильного pdb
, если у него нет доступа к переименованному исполняемому файлу.
Настройка автоматической отладки исключений
В Windows Microsoft автоматически настраивает при сбоях приложений переход к Dr Watson/Отчеты об ошибках в Microsoft. Однако, если у вас установлена Visual Studio или WinDbg, Microsoft предлагает вместо этого выбрать отладка сбоев.
Для простоты установки используйте следующий файл реестра для установки:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="1"
Дополнительный контент для отладки редактора:
Unity.exe -dbgbreak
Запустит Unity и сразу предложит отладчику подключиться, если настроена автоматическая обработка сбоев.
Посмертная/криминалистическая отладка
Windows предоставляет средства для исследования файлов аварийного дампа (.dmp или .mdmp). В зависимости от типа аварийного дампа вы можете увидеть либо информацию о стеке, либо всю память процесса. Содержимое файла дампа определяет причину сбоя, для которой обычно требуется исследовать как минимум стек (при условии, что это допустимый стек).
Чтобы исследовать файл дампа, вы можете загрузить его через Visual Studio или WinDbg. Хотя Visual Studio является более удобным инструментом, он немного ограничен, чем WinDbg.
Советы и рекомендации по отладке
При работе с Visual Studio вы можете использовать расширение UnityMixedCallstack для VS Code от Unity, которое делает отладка еще проще.
Управляемые исключения на родной земле
Обычно NullReferenceException
выглядит следующим образом:
1b45558c()
> mono-2.0-bdwgc.dll!malloc(unsigned int size=12) Line 163 + 0x5f bytes C
mono-2.0-bdwgc.dll!g_hash_table_insert_replace(_GHashTable * hash=0x065c3960, void * key=0x0018cba4, void * value=0x0018cb8c, int replace=457528232) Line 204 + 0x7 bytes C
mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method=0x242bf8b0, void * obj=0x065c3960, void ** params=0x0018cba4, MonoObject * * exc=0x0018cb8c) Line 4889 + 0xc bytes C
Просмотр фреймов управляемого стека
Снова предыдущий пример:
1b45558c()
> mono-2.0-bdwgc.dll!malloc(unsigned int size=12) Line 163 + 0x5f bytes C
mono-2.0-bdwgc.dll!g_hash_table_insert_replace(_GHashTable * hash=0x065c3960, void * key=0x0018cba4, void * value=0x0018cb8c, int replace=457528232) Line 204 + 0x7 bytes C
mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method=0x242bf8b0, void * obj=0x065c3960, void ** params=0x0018cba4, MonoObject * * exc=0x0018cb8c) Line 4889 + 0xc bytes C
Строки без какой-либо информации являются управляемыми кадрами. Однако есть способ получить информацию об управляемом стеке: у mono есть встроенная функция с именем mono_pmip
, которая принимает адрес кадра стека и возвращает char* с информацией. Вы можете вызвать mono_pmip
непосредственно в окне Visual Studio:
?(char*){,,mono-2.0-bdwgc.dll}mono_pmip((void*)0x1b45558c)
0x26a296c0 “ Tiles:OnPostRender () + 0x1e4 (1B4553A8 1B4555DC) [065C6BD0 - Unity Child Domain]”`
Примечание. Это работает, только если символы mono-2.0-bdwgc.dll
загружены правильно.
Заставить приложения создавать дампы
Иногда приложение не аварийно завершает работу с подключенным отладчиком или приложение аварийно завершает работу на удаленном устройстве, где отладчик недоступен. Однако вы все равно можете получить полезную информацию, если сможете получить файл дампа — для этого выполните следующие действия.
Примечание. Эти инструкции применимы как к Windows Standalone, так и к универсальной Windows при работе на настольном компьютере.
- Откройте реестр.
- Перейдите к
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
. - Создайте папку
LocalDumps
, если ее нет. - Добавьте следующие ключи:
“DumpFolder”=
, e.g., C:\Temp “DumpCount”=dword:00000010
“DumpType”=dword:00000002
- Запустите приложение с помощью универсальной платформы Windowsфункции IAP, которая поддерживает симулятор Microsoft In App Purchase, который позволяет тестировать Потоки покупки IAP на устройствах перед публикацией вашего приложения. Дополнительная информация
См. в Словарь или в исполняемом файле Windows Standalone. - Воспроизведите сбой. Файл дампа создается в папке, которую вы указали ранее. Вы можете открыть файл дампа с помощью Visual Studio или WinDbg.