遇到一个足够妖的有关问题,借这里人气请问上
遇到一个足够妖的问题,借这里人气请教下
在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的
我猜会不会是编译优化引起来的,大家帮助分析下
顺祝各位新年愉快,谢谢各位!
------解决方案--------------------
coredump看下汇编代码
------解决方案--------------------
条件断点 - -
------解决方案--------------------
VxWorks是收费的,应该提供服务
在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的
我猜会不会是编译优化引起来的,大家帮助分析下
顺祝各位新年愉快,谢谢各位!
编译优化
windows
------解决方案--------------------
coredump看下汇编代码
------解决方案--------------------
条件断点 - -
------解决方案--------------------
VxWorks是收费的,应该提供服务