amb*_*ght 13 xcode breakpoints swift swift2
有没有什么方法可以指定断点来停止所有'throw'语句?(符号断点)
guard let id = UInt(idString),
let changeset = UInt(changesetString),
let uid = UInt(uidString)
else {
throw OSMVectorMapDescriptionError.ElementAttributeConversionError(element: xmlNode, attributeº: nil)
}
Run Code Online (Sandbox Code Playgroud)
zrz*_*zka 23
首先要记住的是,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.)
Run Code Online (Sandbox Code Playgroud)
......这有点误导,因为抛出的错误不是例外.记住这一点.当你尝试在Xcode中设置异常断点时,没有Swift.可能主要原因是抛出的错误不是例外,他们也没有弄清楚到底在哪里(谁知道).
手动添加
在代码中的某处设置断点,当执行暂停时,只需键入br s -E swift
LLDB提示符然后继续.
自动添加
以这种方式在代码中的某处设置断点...
...当你想要停下来时,切换它(打开/关闭)throw
.
符号断点
当你使用已经提到过的时候,br s -E swift
你会发现它有符号throw
.实际上它不是throw
,但是swift_willThrow
.随意以这种方式设置符号断点...
...我现在不推荐这种方式,因为将来可以更改.但如果它现在足够了,为什么不呢.
你可以在这样的Xcode项目中分享你的断点......
...次要点击,将断点移动到,用户.断点将在所有Xcode项目中可见.
当你遇到断点时,你最终会得到这样的东西......
...并且您必须选择先前的堆栈帧以查看错误被抛出的位置...
刚刚在Xcode 8.3中找到了一个替代方案:菜单中有一个"Swift Error Breakpoint"选项用于添加新的ad-hoc断点:
如果右键单击新创建的断点,甚至可以指定Error
要断开的特定符合类型.
归档时间: |
|
查看次数: |
2889 次 |
最近记录: |