Spec-Zone.ru › Kotlin 1.8

Символизация отчётов об ошибках 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.

Последнее изменение: 10 января 2023
Отладка 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