在调试器中添加两个整数会产生意外输出
Adding two integers in the debugger gives unexpected output
我觉得问这个问题很傻,但我已经尽可能地调试了它。我将两个整数相加,得到不确定的随机字母作为输出。知道发生了什么事吗?
po代表打印对象,所以它可能正在创建一个指针。尝试使用 e:e minutes * 60 + seconds
po 按权利应该拒绝打印任何不是对象指针的内容,但根据大众需求,如果表达式没有生成对象指针,我们让它打印表达式结果的值。我认为人们一直习惯于使用 "po"...
这有点方便,但会使事情变得混乱,因为如果您想要 "po" 的数字恰好也是一个对象指针,那么您会看到对象的描述,而不是数字。
只要唯一的对象是合法的 ObjC 指针值,这种混淆就没什么大不了的,因为指针在内存中的位置很奇怪,而且不是您在正常过程中会遇到的数字。但是不久前 ObjC 添加了 "tagged pointers" - 这是 ObjectiveC 对象,其内容(小字符串,小整数等)实际上适合指针。他们窃取低位以使自己看起来像非法指针,然后其余数字是类型和内容。出于多种原因,这非常酷,但它使这个问题变得更糟,因为现在有更大的 class 整数看起来像对象实例。
要点正如mackworth 上面所说,不要使用"po" 打印不是对象的东西。
我觉得问这个问题很傻,但我已经尽可能地调试了它。我将两个整数相加,得到不确定的随机字母作为输出。知道发生了什么事吗?
po代表打印对象,所以它可能正在创建一个指针。尝试使用 e:e minutes * 60 + seconds
po 按权利应该拒绝打印任何不是对象指针的内容,但根据大众需求,如果表达式没有生成对象指针,我们让它打印表达式结果的值。我认为人们一直习惯于使用 "po"...
这有点方便,但会使事情变得混乱,因为如果您想要 "po" 的数字恰好也是一个对象指针,那么您会看到对象的描述,而不是数字。
只要唯一的对象是合法的 ObjC 指针值,这种混淆就没什么大不了的,因为指针在内存中的位置很奇怪,而且不是您在正常过程中会遇到的数字。但是不久前 ObjC 添加了 "tagged pointers" - 这是 ObjectiveC 对象,其内容(小字符串,小整数等)实际上适合指针。他们窃取低位以使自己看起来像非法指针,然后其余数字是类型和内容。出于多种原因,这非常酷,但它使这个问题变得更糟,因为现在有更大的 class 整数看起来像对象实例。
要点正如mackworth 上面所说,不要使用"po" 打印不是对象的东西。