Spec-Zone.ru › Kotlin 1.7

Символизация отчетов об ошибках 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, но и функции, вложенные при оптимизации машинного кода). Поэтому некоторые элементы стека вызовов могут отсутствовать. В этом случае рассмотрите возможность использования инструмента для обработки отчета об ошибке, который уже был просимволизирован Xcode, например:

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

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

Дополнительные сведения можно найти в документации LLDB.

Последнее изменение: 08 сентября 2021
Отладка Kotlin/Native Советы по улучшению времени компиляции Kotlin/Native

© 2010–2022 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