Spec-Zone.ru › Kotlin 1.9

Символизация отчетов об ошибках iOS

Отладка сбоев приложения iOS иногда включает анализ отчетов об ошибках. Дополнительную информацию об отчетах об ошибках можно найти в документации Apple.

Отчеты об ошибках обычно требуют символизации, чтобы стать правильно читаемыми: символизация преобразует адреса машинного кода в читаемые человеком расположения исходного кода. В документе ниже описаны некоторые конкретные детали символизации отчетов об ошибках из приложений iOS с использованием Kotlin.

Создание .dSYM для релизных бинарников Kotlin

Для символизации адресов в коде Kotlin (например, для элементов стека, соответствующих коду Kotlin) требуется пакет для кода Kotlin.

По умолчанию компилятор Kotlin/Native создает .dSYM для релизных (т.е. оптимизированных) бинарников на платформах Darwin. Это можно отключить с помощью соответствующего флага компилятора. В то же время этот параметр отключён по умолчанию для других платформ. Для его включения используйте опцию компилятора.

kotlin {
    targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
        binaries.all {
            freeCompilerArgs += "-Xadd-light-debug={enable|disable}"
        }
    }
}
kotlin {
    targets.withType(org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget) {
        binaries.all {
            freeCompilerArgs += "-Xadd-light-debug={enable|disable}"
        }
    }
}

В проектах, созданных из шаблонов IntelliJ IDEA или AppCode, эти пакеты затем обнаруживаются Xcode автоматически.

Сделать фреймворки статическими при использовании перестроения из bitcode

Перестроение фреймворка, созданного из Kotlin, из bitcode делает недействительным исходный .dSYM. Если эта операция выполняется локально, убедитесь, что при символизации отчетов об ошибках используется обновлённый .dSYM.

Если перестройка выполняется со стороны App Store, то .dSYM перестроенного динамического фреймворка, похоже, отбрасывается и недоступен для скачивания из App Store Connect. В этом случае может потребоваться сделать фреймворк статическим.

kotlin {
    targets.withType<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget> {
        binaries.withType<org.jetbrains.kotlin.gradle.plugin.mpp.Framework> {
            isStatic = true
        }
    }
}
kotlin {
    targets.withType(org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget) {
        binaries.withType(org.jetbrains.kotlin.gradle.plugin.mpp.Framework) {
            isStatic = true
        }
    }
}

Декодирование вложенных кадров стека

Xcode, похоже, некорректно декодирует элементы стека вложенных вызовов функций (эти не только функции Kotlin, но и функции, вложенные при оптимизации машинного кода). Поэтому некоторые элементы стека могут отсутствовать. В этом случае рассмотрите использование lldb для обработки отчёта об ошибке, уже просимволизированного Xcode, например:

$ lldb -b -o "script import lldb.macosx" -o "crashlog file.crash"

Эта команда должна вывести отчет об ошибке, дополнительно обработанный и содержащий элементы вложенного стека.

Дополнительную информацию можно найти в документации LLDB.

Последнее изменение: 08 сентября 2021 г.
Отладка Kotlin/Native Поддержка целевых платформ Kotlin/Native

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/native-ios-symbolication.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API