如何在所有抛出上设置断点?
How to set a breakpoint on all throws?
有什么方法可以指定断点以停止所有 'throw' 语句? (符号断点)
guard let id = UInt(idString),
let changeset = UInt(changesetString),
let uid = UInt(uidString)
else {
throw OSMVectorMapDescriptionError.ElementAttributeConversionError(element: xmlNode, attributeº: nil)
}
首先要记住的是 Swift 中抛出的错误不是异常,只是错误(NSError
,无论基于 ErrorType
,...)。
第二件事是,不要使用 try!
除非你非常确定它不会崩溃,或者如果崩溃是你真正想要的。
不要混symbolic breakpoint with exception breakpoint。不同的野兽。
回到你的问题...
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。可能主要原因是抛出的错误不是异常,他们还没有弄清楚把它放在哪里(谁知道)。
手动添加
在代码的某处设置断点,当执行暂停时,只需在 LLDB 提示符中键入 br s -E swift
然后继续。
自动添加
以这种方式在代码中的某处设置断点...
... 并在您确实想在 throw
.
停止时切换它 (on/off)
符号断点
当您使用已经提到的 br s -E swift
时,您会发现 throw
的符号。其实不是throw
,而是swift_willThrow
。随意以这种方式设置符号断点...
...暂时不推荐这种方式,以后可以改。但如果现在足够了,为什么不呢。
您可以像这样在 Xcode 个项目中共享您的断点...
...二次点击,将断点移动到,用户。断点将在所有 Xcode 个项目中可见。
当你遇到断点时,你会以这样的方式结束......
...而且您必须 select 之前的堆栈帧才能查看错误发生的位置...
刚刚在 Xcode 8.3 中找到了替代方案:菜单中有一个 "Swift Error Breakpoint" 选项用于添加新的临时断点:
如果您右键单击新创建的断点,您甚至可以指定特定的 Error
类型作为中断点。
有什么方法可以指定断点以停止所有 'throw' 语句? (符号断点)
guard let id = UInt(idString),
let changeset = UInt(changesetString),
let uid = UInt(uidString)
else {
throw OSMVectorMapDescriptionError.ElementAttributeConversionError(element: xmlNode, attributeº: nil)
}
首先要记住的是 Swift 中抛出的错误不是异常,只是错误(NSError
,无论基于 ErrorType
,...)。
第二件事是,不要使用 try!
除非你非常确定它不会崩溃,或者如果崩溃是你真正想要的。
不要混symbolic breakpoint with exception breakpoint。不同的野兽。
回到你的问题...
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。可能主要原因是抛出的错误不是异常,他们还没有弄清楚把它放在哪里(谁知道)。
手动添加
在代码的某处设置断点,当执行暂停时,只需在 LLDB 提示符中键入 br s -E swift
然后继续。
自动添加
以这种方式在代码中的某处设置断点...
... 并在您确实想在 throw
.
符号断点
当您使用已经提到的 br s -E swift
时,您会发现 throw
的符号。其实不是throw
,而是swift_willThrow
。随意以这种方式设置符号断点...
...暂时不推荐这种方式,以后可以改。但如果现在足够了,为什么不呢。
您可以像这样在 Xcode 个项目中共享您的断点...
...二次点击,将断点移动到,用户。断点将在所有 Xcode 个项目中可见。
当你遇到断点时,你会以这样的方式结束......
...而且您必须 select 之前的堆栈帧才能查看错误发生的位置...
刚刚在 Xcode 8.3 中找到了替代方案:菜单中有一个 "Swift Error Breakpoint" 选项用于添加新的临时断点:
如果您右键单击新创建的断点,您甚至可以指定特定的 Error
类型作为中断点。