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

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的

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

顺祝各位新年愉快,谢谢各位!
...全文
372 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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下(底层调用不同),就没问题
昵称很不好取 2013-02-16
  • 打赏
  • 举报
回复
估计是楼主钻牛角尖了 你在那个函数里逐行打印,应该是什么地方手误了

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧