【问题标题】:How to change NSNumber value in XCode while debugging?调试时如何更改 XCode 中的 NSNumber 值?
【发布时间】:2013-01-02 23:03:05
【问题描述】:

我的班级有一个成员变量,它是一个 NSNumber,如下所示:

@interface C : NSObject {
    NSNumber* _n;
}

在调试过程中,我在断点处停止,我想更改 NSNumber 的值。我该怎么做?

我尝试了 XCode 变量窗口,但不起作用。

我尝试了 XCode 调试控制台,例如

expr _n = @1

但这给出了奇怪的消息错误:从不兼容的类型'NSNumber *'分配给'NSNumber *' - 不开玩笑!试试看。

我也试过了

expr _n = [NSNumber numberWithInt:1]

但这给出了同样的结果。

【问题讨论】:

    标签: objective-c xcode debugging nsnumber


    【解决方案1】:

    这对我有用:

    (lldb) expr -- _n = (NSNumber *)[NSNumber numberWithInt:123]
    (NSNumber *) $0 = 0x0000000000007b83 (int)123
    (lldb) po _n
    (NSNumber *) $1 = 0x0000000000007b83 123
    

    -- 用于标记命令选项的结束和“原始”输入的开始。

    严格来说,这并不会改变现有NSNumber的值,而是将一个新的NSNumber对象分配给_n。但是NSNumber 对象是不可变的,因此无论如何都无法更改它们的值。

    【讨论】:

    • 你能分享一些关于学习调试器的好教程的链接吗?
    • @JRG-Developer:我必须承认,对我来说,使用新的 lldb 通常是“试错”。但也许这个帖子有帮助:stackoverflow.com/questions/12974455/….
    • 看起来装箱语法在这里也有效。我尝试了po @(1.5) 并得到了(NSNumber *) $1 = 0x000000010054a520 1.5
    • @nielsbot:我只尝试过@123,它在调试器中不起作用。因此,感谢您的反馈,如果您同意,我可以将其添加到答案中。
    • 当然,我不介意。我只是假设括号是必需的——我从未使用过任何其他语法。
    【解决方案2】:

    尝试使用这一行:

    po _n = @(123)
    

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 2011-06-18
      • 2021-01-26
      • 1970-01-01
      • 2012-04-12
      • 2012-05-12
      • 2012-12-14
      • 1970-01-01
      • 2016-05-16
      相关资源
      最近更新 更多