Swift 在协议方法上设置断点

Swift 在协议方法上设置断点,swift,xcode,debugging,breakpoints,lldb,Swift,Xcode,Debugging,Breakpoints,Lldb,基本上,我需要在协议方法上设置断点,以便捕获对符合该协议的对象的所有调用。我有一个自定义框架,其中有许多类符合协议,因此在每个类上手动设置断点是不可行的 我尝试从Xcode编辑器设置断点: 但是,在设置断点时,我只获得分配方法的断点: ,并且正如预期的那样,调试器在调用doSomething()时不会停止 我还尝试添加符号断点,这里也没有运气: 下面是一些演示代码来说明这一点: protocol TestProtocol { func doSomething() func

基本上,我需要在协议方法上设置断点,以便捕获对符合该协议的对象的所有调用。我有一个自定义框架,其中有许多类符合协议,因此在每个类上手动设置断点是不可行的

我尝试从Xcode编辑器设置断点:

但是,在设置断点时,我只获得分配方法的断点:

,并且正如预期的那样,调试器在调用
doSomething()
时不会停止

我还尝试添加符号断点,这里也没有运气:

下面是一些演示代码来说明这一点:

protocol TestProtocol {
    func doSomething()
    func doAnotherThing()
}

class TestConformingClass: TestProtocol {
    func doSomething() {
        print("Yay")
    }

    func doAnotherThing() {
        print("Hooray")
    }
}

有没有一种方法可以截获对属于协议需求列表一部分的方法的所有调用?

在lldb中运行以下命令应该可以做到这一点:

breakpoint set --name doSomething
breakpoint set --name doAnotherThing
可能的话,甚至以下方法也可能奏效:

breakpoint set --name doSomething --name doAnotherThing

除了有许多符合协议的类型外,您是否也有许多要中断的方法,以及许多调用这些方法的调用站点?如果这两个问题的答案都是否定的,那么您可以选择一个快速且肮脏的只调试的解决方案,在协议扩展中为您的待观察方法添加一个包装器方法,在这个包装器中设置断点,并从客户机代码中调用包装器而不是真正的方法。如果答案是肯定的,那么。。nevermind:)@dr_barto一个装饰师可能会做到这一点,但是我也有很多调用我感兴趣的方法的站点。不幸的是,这两个问题的答案都是肯定的。我只想尝试一种方法,但是我有很多实现和调用程序,而且这两个数字在不久的将来都会增长。在lldb中,您是否可以尝试以下方法:断点集--namedoSomething@MehulParmar谢谢你的建议,我以后再试试,自动取款机我无法使用macxcode@MehulParmar它可以工作,你能用它添加一个答案吗?请注意,如果你发现这些断点捕获了太多同名的不相关函数,您可以使用
--language swift
将匹配限制为仅使用swift符号和/或使用
--shlib
将搜索限制为实现要停止的方法的二进制文件<代码>--shlib也可以多次提供,以将搜索限制为一组共享库。