Cocoa:打破每个方法调用?

jem*_*ons 5 xcode cocoa gdb objective-c

通常在调试时,重要的是要知道以什么顺序调用类的哪些方法.天真的解决方案(我到目前为止一直在使用)是NSLog在每个方法的顶部弹出一个.但这是耗时,重复,丑陋的,如果我忘记在调试后删除日志,我的代码看起来很少.

更清晰的解决方案是在我的每个方法上设置断点,配置它们的操作以发出调试器命令:po NSStringFromSelector(_cmd)并将它们设置为自动继续.这更漂亮,使我不必记住删除所有这些NSLog,但同样重复或耗时.

我真正想要的是一种设置符号断点的方法,该断点在每个方法(类的一个模块?)上都会中断.任何调试/运行时主人都有一个解决方案或提示从哪里开始寻找?

Tom*_*mmy 6

所有的Objective-C的方法调用经过C运行时调用之一objc_msgSend,objc_msgSend_stret,objc_msgSendSuperobjc_msgSendSuper_stret按照"发送消息"一节的Objective-C的运行时参考.所以你应该能够捕获那些,并给它们动作来记录前两个参数的相关部分(它是正常发送的目标和选择器,一个描述超类的结构,包含超级调用的目标和类类型) ).

  • 很好的答案,但我希望在每个'objc_msgSend`上处理一个断点,以减慢速度. (2认同)