【问题标题】:Xcode lldb not storing propertiesXcode lldb 不存储属性
【发布时间】:2015-05-07 21:06:26
【问题描述】:

我目前使用的是 Xcode 6.3.1。在调试区域,我暂停了应用程序并在调试窗口中存储了一个类似p NSString * $test = @"word" 的属性。如果我输入po $test,输出将是word,这是完美的,但只要我让应用程序运行。当我再次暂停它超出类/方法的范围时,它们的属性似乎为零。当我输入p $test 时,我的输出将是(NSString *) $test =

这是此版本 Xcode 的错误还是可以修复?

谢谢

【问题讨论】:

    标签: ios objective-c xcode lldb


    【解决方案1】:

    这里的问题是您正在创建一个 NSString 并将 lldb 便利变量设置为指向它。但是运行时不知道这个变量持有对它的引用。所以在某个时候 ARC 会释放实际的对象。

    我们不会在 lldb 中保留/释放 lldb 便利变量。仅仅因为您碰巧在表达式中引用了某些内容,就很容易最终添加无关的保留,这会以不明显的方式改变程序的行为。

    如果您希望使用表达式解析器创建的 ObjC 对象保持不变,您可以在其上调用“objc_retain”。

    【讨论】:

    • 这似乎也发生在其他对象上,即使在其他类中声明也是如此。例如,在主 ViewController 中,我有一个“UIButton * 按钮”,其中包含一个按钮的实例,我一离开该类就将其存储在 lldb 中为“p UIButton * $btn = self.button”在我的调试器中它也被清除了。我目前正在另一台 Mac 上加载 Xcode,看看它是否只是我的系统的问题。我会再次评论结果。
    • 谢谢...我并不一定对此感到惊讶。 lldb 的便利变量不会捕获对对象的引用,也不会尝试使它们比程序中的存活时间更长。这是设计使然。因此,如果该对象在处理过程中超出范围,那么您有一个指向它的 lldb 便利变量这一事实不会改变这一点。
    • 我使用的是旧版本的 Xcode,它运行良好,但是一旦我更新到 6.3.1,它就会出现问题。如果我不能使用 lldb,是否可以在我当前调试的范围之外查看对象实例?就像我有一个检查网络状态的类并且我的调试器在一个线程中一样。如何从该对象获取状态?
    • 我必须更多地了解正在发生的事情。便利变量保存对象的地址。它不会尝试让它保持活动状态,但另一方面,如果该对象由于其他原因保持活动状态,它的指针应该保持良好,并且稍后调用它的方法也应该工作。
    • 如果你制作一个单视图应用程序并将其放入 ViewController .m 文件中,你会看到问题。在指示的位置添加刹车点。
    猜你喜欢
    • 2016-04-07
    • 2016-11-14
    • 2019-04-04
    • 2014-02-02
    • 2016-10-20
    • 2015-09-16
    • 2012-06-27
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多