Подтвердить что ты не робот

Как установить точку останова при всех бросках?

Есть ли способ, каким образом мы можем указать точку останова, чтобы остановиться на всех операторах "throw"? (символическая точка останова)

guard let id = UInt(idString),
      let changeset = UInt(changesetString),
      let uid = UInt(uidString)
else {
      throw OSMVectorMapDescriptionError.ElementAttributeConversionError(element: xmlNode, attributeº: nil)
}
4b9b3361

Ответ 1

Просто нашел альтернативу в Xcode 8.3: в меню есть опция "Быстрая ошибка точки прерывания" для добавления новых специальных точек останова:

быстрая точка прерывания ошибок

Если вы щелкнете правой кнопкой мыши только что созданную точку останова, вы можете даже указать тип Error -конформирующий тип, который нужно разбить.

custom type

Ответ 2

Прежде всего следует помнить, что ошибки, возникающие в Swift, не являются исключениями, а просто ошибками (NSError, независимо от того, на основе ErrorType,...).

Во-вторых, не используйте try!, если вы не уверены, что он не потерпит крах или если вы действительно хотите, чтобы произошел сбой.

Не смешивайте символическую точку останова с точкой останова исключений. Разные звери.

Вернуться к вашему вопросу...

throw не является символом, поэтому символическая точка останова не работает для вас. Но есть способ...

(lldb)br s -E swift

-E <language> ( --language-exception <language> )
  Set the breakpoint on exceptions thrown by the specified language
  (without options, on throw but not catch.)

... это немного вводит в заблуждение, потому что заброшенные ошибки не являются исключениями. Имейте это в виду. Когда вы пытаетесь установить контрольную точку исключения в Xcode, нет Swift. Вероятно, главная причина заключается в том, что заброшенные ошибки не являются исключениями, и они не выяснили, куда еще поставить (кто знает).

Исключение точки останова - Изменить

Добавить вручную

Установите точку останова где-то в вашем коде, когда выполнение приостанавливается, просто введите br s -E swift в приглашении LLDB и затем продолжите.

Добавить автоматически

Установите точку останова где-то в вашем коде таким образом...

Точка останова br s -E swift

... и переключите его (вкл/выкл), когда вы хотите остановиться на throw.

Символическая точка останова

Когда вы используете уже упомянутый br s -E swift, вы обнаружите, что есть символ для throw. На самом деле это не throw, но swift_willThrow. Не стесняйтесь устанавливать символическую точку останова таким образом...

swift_willThrow символическая точка останова

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

Вы можете поделиться своей точкой останова по проектам Xcode следующим образом:

введите описание изображения здесь

... вторичный щелчок, переместить точку останова на, пользователь. Точка останова будет видна во всех проектах Xcode.

Когда вы нажмете точку останова, вы получите что-то вроде этого...

Точка прерывания на swift_willThrow

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

Бросить стек стека