Xcode调试器:在给定代码行之后在代​​码中的任何地方中断

时间:2010-08-24 13:35:33

标签: objective-c cocoa xcode

我有一行代码,之后我自己的代码行都不会被执行(不在同一个“事件循环”中)。

如何配置Xcode调试器以捕获在给定代码行之后我的某些代码确实执行的实例?

如果无法通过“事件循环”进行过滤,我可以将其过滤到“比较后2秒内”吗?

1 个答案:

答案 0 :(得分:1)

如果您想对此感到困惑,可能依赖于知道在事件循环结束时自动释放池已耗尽,并创建一个覆盖-retain和-release的类,当保留计数(我建议使用ivar)达到零时,设置一个标志,再次将保留计数提高到1,并以某种方式将其存入下一个为新事件循环创建的自动释放池中。在每个方法的开头,你要确保只在某行代码之前发生,检查是否在类覆盖-retain / release中引发了标志,如果不是,则中断/抛出错误/日志/等。 (宏可能会缩短代码,您可以有条件地为调试版本定义它。)然后,在您要确保没有任何代码出现的行之后,重置标志。这样,在此行之后输入的任何代码都将看到unset标志并记录/失败/告诉您,并在每个事件循环后重置该标志。

其他一些事情:您应该定义+ retain / + release并使用+ [NSAutoreleasePool addObject:]将类对象添加到自动释放池中,或者将其设为单个对象,因为标记必须是不可访问的真的想要传递这个对象。其次,我似乎忽略了如何将类/单例插入到自动释放池中以进行下一个循环,在此循环之后。这是因为它是最难的部分,我没有真正的想法,但我有感觉 [self performSelector:@selector(autorelease) afterDelay:0]会起作用。