Здесь мы описываем, как отлаживать сборку с помощью Xcode, предпочитаемой компанией Apple IDE для разработки под macOS и iOS.
Соберите бандл приложения с помощью утилиты bob с ключом --with-symbols
$ cd myproject
$ wget http://d.defold.com/archive/<sha1>/bob/bob.jar
$ java -jar bob.jar --platform armv7-darwin build --with-symbols debug --archive bundle -bo build/ios -mp <app>.mobileprovision --identity "iPhone Developer: Your Name (ID)"
Установите приложение с помощью Xcode
, iTunes
или ios-deploy
$ ios-deploy -b <AppName>.ipa
Получите папку .dSYM
(т.е. отладочные символы)
Если приложение не использует нативные расширения, вы можете скачать файл .dSYM
с сайта d.defold.com
Если вы используете нативные расширения, то папка .dSYM
генерируется при сборке с помощью утилиты bob.jar. Требуется только сборка (без архивации и бандлинга):
$ cd myproject
$ unzip .internal/cache/arm64-ios/build.zip
$ mv dmengine.dSYM <AppName>.dSYM
$ mv <AppName>.dSYM/Contents/Resources/DWARF/dmengine <AppName>.dSYM/Contents/Resources/DWARF/<AppName>
Для правильной отладки нам нужен проект и сопоставленный исходный код. Мы не используем этот проект для сборки, а только для отладки.
Создайте новый проект Xcode, выберите шаблон Game
Выберите имя (например, debug
) и настройки по умолчанию
Выберите папку для сохранения в неё проекта
Добавьте свой код в приложение
Убедитесь, что флажок “Copy items if needed” снят.
Таков конечный результат
Отключите шаг Build
Установите версию Deployment target
, чтобы она была больше, чем версия вашего iOS устройства.
Выберите целевое устройство
У вас есть несколько вариантов отладки приложения
Либо выберите Debug
-> Attach to process...
и выберите оттуда приложение.
Либо выберите Attach to process by PID or Process name
.
В Edit Scheme
добавьте папку
Чтобы использовать lldb, выполнение должно быть приостановлено
Добавьте путь .dSYM
к lldb
(lldb) add-dsym <PathTo.dSYM>
Убедитесь, что lldb
успешно прочитал символы
(lldb) image list <AppName>
Добавьте исходный код движка (подправьте путь по своему усмотрению)
(lldb) settings set target.source-map /Users/builder/ci/builds/engine-ios-64-master/build /Users/mathiaswesterdahl/work/defold
(lldb) settings append target.source-map /private/var/folders/m5/bcw7ykhd6vq9lwjzq1mkp8j00000gn/T/job4836347589046353012/upload/videoplayer/src /Users/mathiaswesterdahl/work/projects/extension-videoplayer-native/videoplayer/src
Возможно получить папку с задачами из исполняемого файла.
Папка задачи называется так job1298751322870374150
, каждый раз это имя со случайным номером.
$ dsymutil -dump-debug-map <executable> 2>&1 >/dev/null | grep /job
Проверьте сопоставления исходников
(lldb) settings show target.source-map
Вы можете проверить, из какого исходного файла происходит отладочный символ, используя команду
(lldb) image lookup -va <SymbolName>
Откройте файл в project view и установите точку останова
Чтобы отладчик пустил папку .dSYM
, UUID должен совпадать с UUID отлаживаемого исполняемого файла. Вы можете проверить UUID так:
$ dwarfdump -u <PathToBinary>
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB