Чеклист Мобильного Разработчика
Сбои
Контрольный список для сбоев
- Отключить code stripping (и установить “slow with exceptions” для iOS)
- Follow the instructions on Optimizing the Size of the Built iOS Player (iphone-playerSizeOptimization) to make sure your game does not crash with stripping on iOS.
- Убедитесь, что хватает памяти (используйте устройство с максимальной RAM для платформы, перезагрузите его, просмотрите логи)
Editor.log - в редакторе
Сообщения отладки, предупреждения и ошибки отображаются в консоли. Unity также отправляет в консоль отчеты о состоянии - загрузка ассетов, инициализация моно, данные графического драйвера.
Если вы пытаетесь понять что происходит, посмотрите editor.log. Здесь вы получите полную картинку, а не фрагмент консоли. Вы можете пытаться понять что происходит и смотреть все логи сессии кодинга. Это поможет вам отследить причину падения в Unity или понять, что не так с вашими ассетами.
Unity prints some things on the devices as well; Logcat console for Android and Xcode gdb console on iOS devices
Отладка на Android
- Использовать DDMS или ADB инструмент.
- Просматривайте трассировку стека (Android 3 или выше). Используйте c++filt (часть ndk_) или другие методы, например http://slush.warosu.org/c++filtjs, чтобы декодировать искаженные вызовы функции
- Просмотрите файл .so, на котором игра вылетела:
-
libunity.so - вылет в коде Unity или пользовательском
-
libdvm.so - вылет связан с Java, с Dalvik. Найдите трассировку стека Dalvik, просмотрите ваш JNI код и все что связано с Java (включая возможные ваши изменения в AndroidManifest.xml).
-
libmono.so - либо баг Mono, либо совершаются действия, трудно совместимые с ней.
- Если логи вылета не помогли, вы можете разобрать их чтобы иметь смутное представление о том, что там произошло.
- Используйте ARM EABI из Android NDK примерно так: objdump.exe -S libmono.so >> out.txt
- Просмотрите код из трассировки стека.
- Попробуйте перебрать этот код с out.txt файлом.
- Прокрутите вверх для понимания того, что произошло в функции.
Отладка на iOS
Xcode имеет встроенные инструменты. Причем в Xcode4 GUI для дебага более приятный, нежели в Xcode3.
Полный gdb стек - поток трассировки
Включите soft-null-check:
Включите билд для разработки (флажок development build) и отладку скрипта (флажок script debugging). Теперь не перехваченные null исключения будут выведены в консоль Xcode с соответствующим стеком вызовов.
Попробуйте включить “fast script call” и отключить зачистку кода (code stripping). Это поможет устранить некоторые случайные крэши (например те, которые вызваны использованием устаревших .Net функций)
Стратегия
- Попробуйте выяснить, какой скрипт вызывает сбой и отладьте его используя mono develop на устройстве.
- Если вы думаете, что сбой не в вашем коде, обратите внимание на трессировку трека, там может быть подсказка о том что произошло. Пришлите нам копию, будем смотреть.
Чеклист Мобильного Разработчика