【发布时间】:2015-01-26 06:53:50
【问题描述】:
考虑以下代码:
class Parent {
func breakMethod() {
println("p break")
}
func breakMethod(#variable: Int) {
println("p breakpoint " + String(variable))
}
}
class Child: Parent {
override func breakMethod() {
println("c break")
}
override func breakMethod(#variable: Int) {
println("c breakpoint " + String(variable))
}
}
let p = Parent()
let c = Child()
p.breakMethod()
c.breakMethod()
p.breakMethod(variable:0)
c.breakMethod(variable:1)
显然,实际上,这可能而且会更加复杂。假设我需要在实现它的每个类中调试其中一个方法。一种选择是遍历每个文件并找到breakMethod 的每个实例并手动添加断点。但更好的选择是向breakMethod 添加一个符号断点。
Xcode 然后会负责在每个适当的位置添加断点。然后我可以手动选择我想要的断点并禁用一些适当的断点。但更重要的是,只需单击一下,我就可以为这个特定符号启用/禁用所有这些。这很方便。
但是如果我想为breakMethod(#variable: Int) 添加断点怎么办?这个可以吗?
显然,我知道我可以将其设置为breakMethod。这将捕获breakMethod 的所有覆盖。然后我可以只启用我想要的那些。但在任何比这复杂得多的情况下,这都会成为一个主要的痛苦。
在 Objective-C 中,我们实际上有单独的方法,看起来像这样:
- (void)breakMethod {
NSLog("break");
}
- (void)breakMethodVariable:(int)variable {
NSLog("break %i", variable);
}
在这种情况下,为“breakMethod”添加一个符号断点只会在第一个方法上停止,我们可以为“breakMethodVariable:”添加一个单独的符号断点,它只会在第二种方法上停止。
但无论我做什么,在为 Swift 设置符号断点时,我似乎都无法分离方法覆盖。我有什么遗漏吗?
对于它的价值,我尝试设置以下符号断点,它们都不适合我:
breakMethod(variable:)breakMethod(variable)breakMethod(#variable:)breakMethod(Variable:)breakMethod(Variable)breakMethod(#Variable:)breakMethodvariable:breakMethodVariable:breakMethodvariablebreakMethodVariablebreakMethodWithVariable:breakMethodWithVariablebreakMethodWithvariable:breakMethodWithvariable
如果知道在 Swift 中无法设置单独的符号断点,我会非常失望,因为在很多情况下,Objective-C 中的大量不同方法已经变成了一组复杂的覆盖.
【问题讨论】:
标签: xcode debugging swift breakpoints lldb