遇到一个足够妖的问题,借这里人气请教下

jiaoyun007 2013-02-16 10:25:24
在VxWorks下遇到一个很有意思的问题,就是定义了一个宏:

typedef enum
{
LOCAL = 0,
INCOMING = 1,
OUTGOING = 2
} MODE_t;

,如上面所示,然后在一个函数中用到它,代码内容如下:

...
if (pCb->mode == LOCAL)
{
...
}
...
,在这里经查看打印,pCb->mode的内容是0,但是进不去这个if语句后面花括号里的代码,再加打印发现,调用此函数之前和之后,LOCAL的值都是0,一进入此函数,LOCAL的值就变成1了,但是并没有在哪里修改LOCAL这个宏的值

同样的代码在Simulator上运行就没有问题,不过底层代码是Windows的

我猜会不会是编译优化引起来的,大家帮助分析下

顺祝各位新年愉快,谢谢各位!
...全文
329 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jiaoyun007 2013-02-26
查出来了,头文件包含引起来的,呵呵
  • 打赏
  • 举报
回复
geekjack 2013-02-16
引用 2 楼 geekjack 的回复:
条件断点 - -
额 VxWorks,抱歉,没用过……
  • 打赏
  • 举报
回复
geekjack 2013-02-16
条件断点 - -
  • 打赏
  • 举报
回复
t1397018 2013-02-16
coredump看下汇编代码
  • 打赏
  • 举报
回复
AnYidan 2013-02-16
VxWorks是收费的,应该提供服务
  • 打赏
  • 举报
回复
jiaoyun007 2013-02-16
引用 4 楼 thefirstz 的回复:
估计是楼主钻牛角尖了 你在那个函数里逐行打印,应该是什么地方手误了
逐行加打印有点困难,系统调用顺序是: a)先调用这个模块,b)再跳到别的模块,c)再回来重新调用这个模块, 在a)步骤里离开时候打印还显示正常,c)步骤刚开始打印就显示值被改了,b)步骤里因为在别的模块看不到这个值,无法打印 而且,因为是在实际的设备上运行才有此问题,也无法实际跟踪 代码本身没问题的,同样的是在Windows下(底层调用不同),就没问题
  • 打赏
  • 举报
回复
估计是楼主钻牛角尖了 你在那个函数里逐行打印,应该是什么地方手误了
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2013-02-16 10:25
社区公告
暂无公告