Что такое Dead & Exploded в стеке исключений Swift?

В стеке исключений для сбоев во время работы Swift часто говорит, что аргументы Dead или Exploded. Что это значит и имеет ли это значение для целей отладки?

Например:

-> 0x100209cf0 <function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> ()+44>: brk #0x1 

Благодарю.

    Что это значит?

    Компилятор Swift отмечает функциональные аргументы по ряду причин, в основном связанных с внутренней оптимизацией. По вашему вопросу мы сосредоточимся на mangler, так как это способствует вашей красивой трассировке стека и принтеру узла. На момент публикации этого сообщения функция mangler специализации функции имеет 6 знаков, которые она может применить к аргументу:

    • мертв

      Аргумент не используется в теле функции и может быть удален в результате удаления элемента.

    • закрытие

      Аргументом является закрытие и может потребовать дальнейшего манипулирования / демонтажа.

    • постоянная

      Аргумент является константой.

    • Владеет гарантией

      Собственный аргумент передается владельцем вызываемого абонента. Таким образом, аргумент имеет сильную ссылку, связанную с ним [вызывающего абонента], и, как гарантируется, он может прожить через вызов, поэтому компилятор позволяет вызывающему абоненту преодолеть передачу, а совокупность сохраняется.

    • SROA

      Скалярная замена перехода агрегатов должна оптимизировать этот аргумент.

    • В Out To Value

      Параметр был отмечен inout, но вызывающий его фактически не мутирует.

    Принтер AST AST добавляет еще одну отметку

    • взорванный

      Значение имеет схему взрыва, которая была реализована при вызове.

    Для всех целей и целей мы заботимся только о Dead , Owned to Guaranteed и Exploded .

    Единственный, который все еще может показаться загадочным, – Exploded . Explosion – это оптимизационная конструкция, используемая компилятором Swift для определения стратегии для распаковки значений из небольших структур и перечислений в регистры. Таким образом, когда принтер узла говорит, что значение « Exploded , значит, оно уже распаколо значение в регистры перед вызовом.

    это имеет значение для целей отладки?

    Неа.

    Основываясь на том, что я смог найти в библиотеке разработчиков Apple, я считаю, что когда Swift говорит, что аргумент взорван, он был расширен, чтобы показать ошибку до тех пор, пока он не покажет все слои и части аргумента. Swift делает это, чтобы облегчить поиск ошибок, которые вложены между уровнями аргумента. Я не уверен, что значит мертвый. Это может быть совершенно несовместимо, но я полагаю, что, поскольку вы не получили ответа через 6 дней, я мог бы попробовать и уточнить, что вы проблема.

    Мертвый обычно означает, что значение больше не в памяти

    Не уверен, как это поможет вам, если вы действительно не погрузитесь в отладку сборки.

    Вы можете проверить некоторые онлайн-ресурсы, то есть, как использовать отладчик в Xcode для устранения неполадок с вашим кодом.

    Interesting Posts

    XCode 4: некоторые названия кнопок, не видимые в iOS-симуляции

    UIScrollView не будет прокручиваться, даже после установки размера контента

    RubyMotion и указатели

    Преобразование речи в текст в iOS

    Как проверить, существует ли раскадровка в определенном NSBundle

    MKMapView показывает неправильно сохраненную область

    Какие свойства я должен установить для nil в viewDidUnload?

    выделение текста внутри текстового поля

    команда компоновщика не удалась с кодом выхода 1 (используйте -v для просмотра вызова) в Swift

    Как перезаписать файл с помощью NSFileManager при копировании?

    Создание события календаря с помощью сигнала тревоги с помощью EKEventEditViewController

    Как установить идентификатор UIView в Xcode 4.5 / iOS для отладки автоматического макета?

    Objective-C – Тип приемника «NSInteger» (иначе «long») не является классом Objective-C & Receiver «NSDecimal» не является классом Objective-C

    После того как я выпущу приложение iOS, можно ли изменить цель развертывания с iOS8 на iOS7?

    Можно ли использовать сертификат клиента, установленный на устройстве iOS в моем приложении?

    Давайте будем гением компьютера.