【问题标题】:How to set a symbolic breakpoint on only some overrides?如何仅在某些覆盖上设置符号断点?
【发布时间】: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:
  • breakMethodvariable
  • breakMethodVariable
  • breakMethodWithVariable:
  • breakMethodWithVariable
  • breakMethodWithvariable:
  • breakMethodWithvariable

如果知道在 Swift 中无法设置单独的符号断点,我会非常失望,因为在很多情况下,Objective-C 中的大量不同方法已经变成了一组复杂的覆盖.

【问题讨论】:

    标签: xcode debugging swift breakpoints lldb


    【解决方案1】:

    我不知道如何在 Xcode 断点导航器中做到这一点,并让它们在执行过程中持续存在。

    但是,作为一种解决方法,您可以为此使用正则表达式断点:

    (lldb) breakpoint set -r "\.breakMethod \(.+\(variable :"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多