Есть ли способ, каким образом мы можем указать точку останова, чтобы остановиться на всех операторах "throw"? (символическая точка останова)
Ответ 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]()
... и вам нужно выбрать предыдущий кадр стека, чтобы увидеть, где была выбрана ошибка...
![Бросить стек стека]()