有没有什么方法可以指定一个断点来停止所有的'throw'语句?(符号断点)
guard let id = UInt(idString),
let changeset = UInt(changesetString),
let uid = UInt(uidString)
else {
throw OSMVectorMapDescriptionError.ElementAttributeConversionError(element: xmlNode, attributeº: nil)
}
2条答案
按热度按时间siotufzp1#
首先要记住的是,Swift中抛出的错误不是异常,只是错误(
NSError
,基于ErrorType
的任何错误,...)。第二件事是,不要使用
try!
,除非你他妈的确定它不会崩溃,或者如果崩溃是你真正想要的。别把symbolic breakpoint和exception breakpoint混在一起。不同的野兽。
回到你的问题...
throw
不是一个符号,因此符号断点对您不起作用。但是有一种方法.........这有点误导,因为抛出的错误不是异常。请记住这一点。当你试图在Xcode中设置异常断点时,没有Swift。可能主要原因是抛出的错误不是异常,他们还没有弄清楚把它放在哪里(谁知道呢)。
手动添加
在代码中的某处设置断点,当执行暂停时,只需在LLDB提示符下键入
br s -E swift
,然后继续。自动添加
以这种方式在代码中的某个位置设置断点...
...当您确实想在
throw
上停止时,可以切换它(开/关)。符号断点
当你使用已经提到的
br s -E swift
时,你会发现有一个throw
的符号。实际上它不是throw
,而是swift_willThrow
。请随意以这种方式设置符号断点.........我暂时不推荐这种方式,因为以后可以改变,但如果现在就足够了,为什么不呢?
您可以像这样在Xcode项目之间共享断点...
...辅助点按,* 将断点移到 , 用户 *。断点将在所有Xcode项目中可见。
当你遇到断点时,你会得到这样的结果...
x1c4d 1x指令集
...并且您必须选择上一个堆栈帧以查看引发错误的位置...
ne5o7dgx2#
刚刚在Xcode 8.3中找到了一个替代方案:在菜单中有一个“Swift Error Breakpoint”选项,用于添加新的临时断点:
如果右键单击新创建的断点,甚至可以指定一个特定的符合
Error
的类型来中断。