我已经尝试在类定义中创建断点,停止发送到对象实例的消息,希望它然后跳转到类代码并允许我逐行遍历并查看本地的值变量
但是,我打算冒险说“不,这不可能”,因为在内存中可能有多个类的实例。如果有人能给出更好的解释,那就太棒了。
(作为旁注,我的替代方案是运行时数据的NSLogging过多。)
答案 0 :(得分:3)
是的,有可能!您可以向断点添加条件:
http://d.pr/yZVB+ http://d.pr/pWOB+
只有满足条件时,程序才会在此断点处暂停。您可以选择self == _myGlobalInstanceOfInterest
等条件。
如果您不想将实例存储在变量中,例如,您可能会在没有条件的情况下启动断点 - 然后当您在程序运行时找出所需的实例时,请使用{{1获取地址,然后设置条件以使用该地址(例如p myObject
)。
答案 1 :(得分:2)
我认为你想要打破发送到特定实例的消息?
阅读有关断点和观察点的Xcode文档。基本上,您可以在断点上设置条件,以便在self不是您感兴趣的实例时自动继续。
答案 2 :(得分:1)
假设你在谈论这样的事情:
- (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]