Objective c 为什么LLDB在算术中使用了错误的结构字段?

Objective c 为什么LLDB在算术中使用了错误的结构字段?,objective-c,debugging,struct,lldb,Objective C,Debugging,Struct,Lldb,我正在使用cocos3d中的一个名为CC3IntPoint的结构: typedef struct { GLint x; /**< The X-componenent of the point. */ GLint y; /**< The Y-componenent of the point. */ } CC3IntPoint; 但是,如果我在pos.y上做任何数学运算,它会使用pos.x!例如: (lldb) p pos.y+1 (int) $7 = 49 (ll

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

typedef struct {
  GLint x;    /**< The X-componenent of the point. */
  GLint y;    /**< The Y-componenent of the point. */
} CC3IntPoint;
但是,如果我在
pos.y
上做任何数学运算,它会使用
pos.x
!例如:

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

我是不是漏掉了什么明显的东西?有没有关于如何修复的想法?

看起来很像一个bug

请归档

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

如果你真的想探究这个问题,我建议你抓取各种子支出的地址,看看你是否能找到它决定抓取错误字段的地方


见Jason对原始问题的评论;这确实应该是答案。

。。。看起来像个bug。这是什么LLDB版本?您的结构是ivar吗?XCode 4.6中的LLDB-179.1。是的,在上的错误报告是解决这个问题的方法。如果可能的话,我会包括执行此操作时停在其中的
.o
文件(感兴趣的是
.o
文件中的调试信息),在执行
p pos.y+1
-do
log enable-f/tmp/exprlog.txt lldb expr
之前,我会打开表达式日志记录,然后在执行
p pos.y+1
时,大量调试日志将写入
/tmp/exprlog.txt
,应该附在bug报告中。在调试信息和表达式日志之间,应该很容易找出发生了什么。好的,我很乐意报告它,但我不确定如何从XCode中执行这些操作。我不知道它把.o文件放在哪里,我想我无法控制它如何启动lldb。
(lldb) p pos.y+1
(int) $7 = 49
(lldb) p pos.y*1
(int) $8 = 48