请考虑以下代码:
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:
breakMethodvariable
breakMethodVariable
breakMethodWithVariable:
breakMethodWithVariable
breakMethodWithvariable:
breakMethodWithvariable
我非常失望地知道在Swift中没有办法设置单独的符号断点,考虑到Objective-C中过多的不同方法的用户在很多情况下变成了一组复杂的覆盖
答案 0 :(得分:3)
我不知道如何在Xcode Breakpoint导航器中执行此操作,并使它们在执行过程中保持不变。
但是,作为一种解决方法,您可以使用正则表达式断点:
(lldb) breakpoint set -r "\.breakMethod \(.+\(variable :"