是否可以在对象的实例中停止断点?

时间:2011-07-27 03:19:51

标签: objective-c xcode oop

我已经尝试在类定义中创建断点,停止发送到对象实例的消息,希望它然后跳转到类代码并允许我逐行遍历并查看本地的值变量

但是,我打算冒险说“不,这不可能”,因为在内存中可能有多个类的实例。如果有人能给出更好的解释,那就太棒了。

(作为旁注,我的替代方案是运行时数据的NSLogging过多。)

3 个答案:

答案 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]