|
@@ -1,6 +1,6 @@
|
|
|
---
|
|
|
title: Отладка нативного кода в Defold
|
|
|
-brief: Это руководство объясняет как отлаживать нативный код в Defold.
|
|
|
+brief: Это руководство объясняет как отлаживать нативный код в Defold.
|
|
|
---
|
|
|
|
|
|
# Отладка нативного кода
|
|
@@ -10,14 +10,14 @@ Defold неплохо протестирован и очень редко дае
|
|
|
* Используйте отладчик для пошагового выполнения кода
|
|
|
* Используйте отладочный вывод
|
|
|
* Анализируйте логи сбоев
|
|
|
-* Сгенерируйте отладочные символы к стеку вызовов
|
|
|
+* Сгенерируйте отладочные символы к стеку вызовов
|
|
|
|
|
|
|
|
|
## Использование отладчика
|
|
|
|
|
|
Самый распространенный способ - запустить код через отладчик. Он позволяет вам пройти по коду, установить `точки останова` (`breakpoints`) и он остановит выполнение, если вы получите сбой.
|
|
|
|
|
|
-Для каждой платформы существует несколько отладчиков.
|
|
|
+Для каждой платформы существует несколько отладчиков.
|
|
|
|
|
|
* Visual studio - Windows
|
|
|
* VSCode - Windows, macOS, Linux
|
|
@@ -40,26 +40,26 @@ Defold неплохо протестирован и очень редко дае
|
|
|
|
|
|
## Применение отладочного вывода
|
|
|
|
|
|
-Самый простой способ отладки нативного кода - использовать [отладочную печать](http://en.wikipedia.org/wiki/Debugging#Techniques). Используйте функции в [пространстве имен dmLog](/ref/stable/dmLog/), чтобы наблюдать за переменными или обозначать поток выполнения. Использование любой из функций логирования приведет к печати в секции *Console* в редакторе и в [лог игры](/manuals/debugging-game-and-system-logs).
|
|
|
+Самый простой способ отладки нативного кода - использовать [отладочную печать](http://en.wikipedia.org/wiki/Debugging#Techniques). Используйте функции в [пространстве имен dmLog](/ref/stable/dmLog/), чтобы наблюдать за переменными или обозначать поток выполнения. Использование любой из функций логирования приведет к печати в секции *Console* в редакторе и в [лог игры](/manuals/debugging-game-and-system-logs).
|
|
|
|
|
|
|
|
|
## Анализ лога сбоя
|
|
|
|
|
|
Движок Defold сохраняет файл `_crash` в случае серьезного сбоя. crash файл будет содержать информацию о системе, а также о сбое. В [выводе лога игры](/manuals/debugging-game-and-system-logs) будет записано, где находится crash файл (это зависит от операционной системы, устройства и приложения).
|
|
|
|
|
|
-Вы можете использовать [crash модуль](https://www.defold.com/ref/crash/), чтобы прочитать этот файл в следующей сессии. Рекомендуется прочитать файл, собрать информацию, вывести ее в консоли и отправить в [сервисы аналитики](/tags/stars/analytics/), которые поддерживают сбор crash логов.
|
|
|
+Вы можете использовать [crash модуль](https://www.defold.com/ref/crash/), чтобы прочитать этот файл в следующей сессии. Рекомендуется прочитать файл, собрать информацию, вывести ее в консоли и отправить в [сервисы аналитики](/tags/stars/analytics/), которые поддерживают сбор crash логов.
|
|
|
|
|
|
::: important
|
|
|
В Windows также создается файл `_crash.dmp`. Этот файл полезен при отладке сбоя.
|
|
|
:::
|
|
|
|
|
|
-### Получение лога сбоев с устройства
|
|
|
+### Получение лога сбоев с устройства
|
|
|
|
|
|
-Если сбой происходит на мобильном устройстве, вы можете загрузить crash файл на свой компьютер и проанализировать его локально.
|
|
|
+Если сбой происходит на мобильном устройстве, вы можете загрузить crash файл на свой компьютер и проанализировать его локально.
|
|
|
|
|
|
#### Android
|
|
|
|
|
|
-Если приложение [в режиме отладки](/manuals/project-settings/#android), вы можете получить лог сбоев с помощью [Android Debug Bridge (ADB) tool](https://developer.android.com/studio/command-line/adb.html) и команды `adb shell`:
|
|
|
+Если приложение [в режиме отладки](/manuals/project-settings/#android), вы можете получить лог сбоев с помощью [Android Debug Bridge (ADB) tool](https://developer.android.com/studio/command-line/adb.html) и команды `adb shell`:
|
|
|
|
|
|
```
|
|
|
$ adb shell "run-as com.defold.example sh -c 'cat /data/data/com.defold.example/files/_crash'" > ./_crash
|
|
@@ -69,31 +69,31 @@ Defold неплохо протестирован и очень редко дае
|
|
|
|
|
|
В iTunes вы можете просмотреть/загрузить контейнер приложений.
|
|
|
|
|
|
-В окне `Xcode -> Devices` вы также можете выбрать логи сбоев.
|
|
|
+В окне `Xcode -> Devices` вы также можете выбрать логи сбоев.
|
|
|
|
|
|
|
|
|
## Генерация отладочных символов к стеку вызовов
|
|
|
|
|
|
Если вы получили стек вызовов либо из файла `_crash`, либо из [лог файла](/manuals/debugging-game-and-system-logs), вы можете сгенерировать отладочные символы. Это означает перевод каждого адреса в стеке вызовов в имя файла и номер строки, что, в свою очередь, помогает при обнаружении основной причины падения.
|
|
|
|
|
|
-Очень важно, чтобы вы сопоставили правильный движок со стеком вызовов. В противном случае очень вероятно, что вы получите неверную отладку. Если вы работаете с нативными расширениями, не забудьте добавить флаг [--with-symbols](https://www.defold.com/manuals/bob/) к [утилите bob](https://www.defold.com/manuals/bob/) или установите флажок "Generate debug symbols" в диалоговом окне пакета в редакторе, чтобы получить все необходимые данные с сервера сборки:
|
|
|
+Очень важно, чтобы вы сопоставили правильный движок со стеком вызовов. В противном случае очень вероятно, что вы получите неверную отладку. Если вы работаете с нативными расширениями, не забудьте добавить флаг [--with-symbols](https://www.defold.com/manuals/bob/) к [утилите bob](https://www.defold.com/manuals/bob/) или установите флажок "Generate debug symbols" в диалоговом окне пакета в редакторе, чтобы получить все необходимые данные с сервера сборки:
|
|
|
|
|
|
* iOS и macOS - папка `dmengine.dSYM` в `build.zip` содержит символы отладки для сборок под iOS/macOS.
|
|
|
* Android и Linux - сами исполняемые файлы содержат символы отладки.
|
|
|
* Windows - файл `dmengine.pdb` в архиве ` build.zip` содержит символы отладки для сборок под Windows.
|
|
|
-* HTML5 - файл `dmengine.js.symbols` в архиве` build.zip` содержит символы отладки для сборок под HTML5.
|
|
|
+* HTML5 - файл `dmengine.js.symbols` в архиве` build.zip` содержит символы отладки для сборок под HTML5.
|
|
|
|
|
|
-Если вы делаете сборки без нативных расширений, символы отладки доступны на [веб-сайте для скачивания Defold](http://d.defold.com):
|
|
|
+Если вы делаете сборки без нативных расширений, символы отладки доступны на [веб-сайте для скачивания Defold](http://d.defold.com):
|
|
|
|
|
|
* iOS - Файлы `engine/armv7-darwin/dmengine_release.dSYM.zip` и` engine/arm64-darwin/dmengine_release.dSYM.zip` содержат символы отладки для 32- и 64-битных версий движка.
|
|
|
-* macOS - Файл `engine/x86_64-darwin/dmengine_release.dSYM.zip` содержит символы отладки.
|
|
|
+* macOS - Файл `engine/x86_64-macos/dmengine_release.dSYM.zip` содержит символы отладки.
|
|
|
* Android - Файлы движков `engine/armv7-android/dmengine.apk` и `engine/arm64-android/dmengine.apk` включают символы отладки для 32- и 64-битных версий движка.
|
|
|
* Linux - Файл движка `engine/x86_64-linux/dmengine_release` включает символы отладки.
|
|
|
* Windows - Файл `engine/x86_64-win32/dmengine_release.pdb` содержит символы отладки.
|
|
|
-* HTML5 - Файл `engine/js-web/dmengine_release.js.symbols` содержит символы отладки.
|
|
|
+* HTML5 - Файл `engine/js-web/dmengine_release.js.symbols` содержит символы отладки.
|
|
|
|
|
|
::: important
|
|
|
-Очень важно, чтобы вы сохранили где-нибудь символы отладки для каждого публичного релиза вашей игры, и чтобы вы знали, к какому релизу принадлежат отладочные символы. Вы не сможете отлаживать нативные сбои, если у вас не будет отладочных символов! Кроме того, вы должны держать под рукой включающую отладочные символы версию движка. Это позволяет лучше всего отображать стек вызовов.
|
|
|
+Очень важно, чтобы вы сохранили где-нибудь символы отладки для каждого публичного релиза вашей игры, и чтобы вы знали, к какому релизу принадлежат отладочные символы. Вы не сможете отлаживать нативные сбои, если у вас не будет отладочных символов! Кроме того, вы должны держать под рукой включающую отладочные символы версию движка. Это позволяет лучше всего отображать стек вызовов.
|
|
|
:::
|
|
|
|
|
|
### Генерация отладочных символов к стеку вызовов Android
|
|
@@ -108,7 +108,7 @@ Defold неплохо протестирован и очень редко дае
|
|
|
|
|
|
1. Найдите адрес в стеке вызовов
|
|
|
|
|
|
- Например, в стеке вызовов без отладочных символов это могло бы выглядеть так
|
|
|
+ Например, в стеке вызовов без отладочных символов это могло бы выглядеть так
|
|
|
|
|
|
#00 pc 00257224 libmy_game_name.so
|
|
|
|
|
@@ -118,22 +118,22 @@ Defold неплохо протестирован и очень редко дае
|
|
|
|
|
|
$ arm-linux-androideabi-addr2line -C -f -e dmengine_1_2_105/lib/armeabi-v7a/libdmengine.so _address_
|
|
|
|
|
|
-Примечание: Если вы получите стектрейс из [логов Android](/manuals/debugging-game-and-system-logs), вы можете снабдить его отладочными символами с помощью [ndk-stack](https://developer.android.com/ndk/guides/ndk-stack.html).
|
|
|
+Примечание: Если вы получите стектрейс из [логов Android](/manuals/debugging-game-and-system-logs), вы можете снабдить его отладочными символами с помощью [ndk-stack](https://developer.android.com/ndk/guides/ndk-stack.html).
|
|
|
|
|
|
### Генерация отладочных символов к стеку вызовов iOS
|
|
|
|
|
|
-1. Если вы используете нативные расширения, сервер может предоставить вам символы (.dSYM) (передайте ключ `--with-symbols` в bob.jar)
|
|
|
+1. Если вы используете нативные расширения, сервер может предоставить вам символы (.dSYM) (передайте ключ `--with-symbols` в bob.jar)
|
|
|
|
|
|
$ unzip <project>/build/arm64-darwin/build.zip
|
|
|
# it will produce a Contents/Resources/DWARF/dmengine
|
|
|
|
|
|
-1. Если вы не используете нативные расширения, скачайте стандартные отладочные символы:
|
|
|
+1. Если вы не используете нативные расширения, скачайте стандартные отладочные символы:
|
|
|
|
|
|
$ wget http://d.defold.com/archive/<sha1>/engine/arm64-darwin/dmengine.dSYM
|
|
|
|
|
|
-1. Получите отладочные символы, используя адрес загрузки
|
|
|
+1. Получите отладочные символы, используя адрес загрузки
|
|
|
|
|
|
- По какой-то причине простое добавление адреса из стека вызовов не работает (т. е. адрес загрузки 0x0)
|
|
|
+ По какой-то причине простое добавление адреса из стека вызовов не работает (т. е. адрес загрузки 0x0)
|
|
|
|
|
|
$ atos -arch arm64 -o Contents/Resources/DWARF/dmengine 0x1492c4
|
|
|
|
|
@@ -141,7 +141,7 @@ Defold неплохо протестирован и очень редко дае
|
|
|
|
|
|
$ atos -arch arm64 -o MyApp.dSYM/Contents/Resources/DWARF/MyApp -l0x100000000 0x1492c4
|
|
|
|
|
|
- Добавление адреса загрузки к адресу из стека вызовов даст нужный результат:
|
|
|
+ Добавление адреса загрузки к адресу из стека вызовов даст нужный результат:
|
|
|
|
|
|
$ atos -arch arm64 -o MyApp.dSYM/Contents/Resources/DWARF/MyApp 0x1001492c4
|
|
|
dmCrash::OnCrash(int) (in MyApp) (backtrace_execinfo.cpp:27)
|