Spec-Zone.ru › Kotlin 1.4

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

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

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

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

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

По умолчанию компилятор Kotlin/Native производит .dSYM для релизных (т. е. оптимизированных) бинарников на платформах Darwin. Это можно отключить с помощью флага компилятора -Xadd-light-debug=disable. В то же время этот параметр отключен по умолчанию для других платформ, для его включения используйте -Xadd-light-debug=enable. Для управления параметром в Gradle используйте

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

(в DSL Kotlin).

В проектах, созданных из шаблонов IntelliJ IDEA или AppCode, эти .dSYM пакеты затем обнаруживаются 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
        }
    }
}

(в DSL Kotlin).

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

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

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

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

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

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

Spec-Zone.ru

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