objective-c – 为什么LLDB使用我的struct的错误字段进行算术运算?

我正在使用来自cocos3d的一个名为CC3IntPoint的结构:

typedef struct {
  GLint x;    /**< The X-componenent of the point. */
  GLint y;    /**< The Y-componenent of the point. */
} CC3IntPoint;

当我运行我的程序时,它在调试器中看起来很正常:

(lldb) p pos
(CC3IntPoint) $5 = {
  (GLint) x = 48
  (GLint) y = 91
}
(lldb) p pos.y
(GLint) $6 = 91

但是,如果我在pos.y上做任何数学运算,它会使用pos.x!例如:

(lldb) p pos.y+1
(int) $7 = 49
(lldb) p pos.y*1
(int) $8 = 48

我错过了一些明显的东西吗?有关如何修复的任何想法?

最佳答案 这看起来非常像一个bug.

请提交.

我会说这是某种指针算法魔术,但我无法想象是这样的.

如果你真的想探索这个问题,我会建议抓住各种子表达的地址,看看你是否能找到它决定抓错区域的地方.

见杰森对原始问题的评论;这应该是答案.

点赞