【问题标题】:Is it possible to stop on a breakpoint in an instance of an object?是否可以在对象实例中的断点处停止?
【发布时间】:2011-07-27 03:19:51
【问题描述】:

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

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

(顺便说一句,我的替代方法是对运行时数据进行过多的 NSLogging。)

【问题讨论】:

    标签: objective-c xcode oop


    【解决方案1】:

    是的,这是可能的!您可以向断点添加条件:

    http://d.pr/yZVB+ http://d.pr/pWOB+

    程序只有在条件满足时才会在这个断点处暂停。您可以选择一个条件,例如self == _myGlobalInstanceOfInterest

    如果您不想将实例存储在变量中,例如,您可以在没有条件的情况下启动断点 - 然后当您在程序运行时确定需要哪个实例时,使用 p myObject获取地址,然后设置使用该地址的条件(例如self == 0x8badf00d)。

    【讨论】:

      【解决方案2】:

      我认为您想在向特定实例发送消息时中断?

      阅读有关断点和观察点的 Xcode 文档。基本上,您可以在断点上设置条件,以便在 self 不是您感兴趣的实例时自动继续。

      【讨论】:

        【解决方案3】:

        假设你在谈论这样的事情:

        - (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]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-20
          • 1970-01-01
          • 2017-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-23
          相关资源
          最近更新 更多