【发布时间】:2011-07-27 03:19:51
【问题描述】:
我尝试在类定义中创建断点,在发送到对象实例的消息上停止,希望它然后跳转到类代码并允许我逐行遍历并查看本地的值变量。
但是,我要冒险说“不,这应该不可能”,因为内存中可能有多个类的实例。如果有人能给出更好的解释,那就太好了。
(顺便说一句,我的替代方法是对运行时数据进行过多的 NSLogging。)
【问题讨论】:
标签: objective-c xcode oop
我尝试在类定义中创建断点,在发送到对象实例的消息上停止,希望它然后跳转到类代码并允许我逐行遍历并查看本地的值变量。
但是,我要冒险说“不,这应该不可能”,因为内存中可能有多个类的实例。如果有人能给出更好的解释,那就太好了。
(顺便说一句,我的替代方法是对运行时数据进行过多的 NSLogging。)
【问题讨论】:
标签: objective-c xcode oop
是的,这是可能的!您可以向断点添加条件:
http://d.pr/yZVB+ http://d.pr/pWOB+
程序只有在条件满足时才会在这个断点处暂停。您可以选择一个条件,例如self == _myGlobalInstanceOfInterest。
如果您不想将实例存储在变量中,例如,您可以在没有条件的情况下启动断点 - 然后当您在程序运行时确定需要哪个实例时,使用 p myObject获取地址,然后设置使用该地址的条件(例如self == 0x8badf00d)。
【讨论】:
我认为您想在向特定实例发送消息时中断?
阅读有关断点和观察点的 Xcode 文档。基本上,您可以在断点上设置条件,以便在 self 不是您感兴趣的实例时自动继续。
【讨论】:
假设你在谈论这样的事情:
- (void)eatAPieceOfFruit: (NSFruit *)fruit {
NSString * fruitType = [fruit species];
BOOL hasSeeds = [fruit hasSeeds];
NSInteger deliciousnessRating = [self enjoymentOfFruitType: fruitType];
NSString * reactionToEating = [self phraseForFruitType: fruitType];
// Breakpoint set here
}
调试器可以访问并知道范围内的任何变量的名称——您可以在实际代码中您中断的行中使用的任何变量,您也可以通过调试器访问。因此,在调试器提示符下,键入:
po reactionToEating
(即“打印对象”的“po”)或任何其他局部变量的名称以查看它是什么。如果您想在范围内的对象上调用方法,您可以这样做:
print (int)[reactionToEating length]
po [reactionToEating capitalizedString]
【讨论】: