Keil5 debug时Watch窗口的变量<not in scope>,并且警告variable “变量“ was set but never used

Keil5,debug过程中,在watch窗口中看不到局部变量的值,显示not in scope,并且警告variable "变量" was set but never used,这两个问题是同一个原因。编译器把变量优化掉了。

本想设置个临时变量存储一个结果,然后在调试器中查看。开始没有注意这个警告,调试时才发现变量不可访问,出现这个警告的时候,编译器可能已经把这个它认为没有用的变量给优化掉了。

不让优化也好办:

MDK仿真 Watch 窗口的变量 出现<not in scope>(不在范围内),解决办法_<not in scope>-CSDN博客

这三个变量值得说道说道

idq是全局变量

i是局部变量

state是局部变量

编译时state报警 variable "state" was set but never used

在watch窗口中idq和i可以正常显示,state不能<not in scope>

我寻思我也使用了啊??后面的调用是这样的

如此理解一下state为什么没有使用,因为state接收了返回值之后,没有输出,也没有赋值操作了

i是有赋值的,idq是全局变量,不存在这个警告。

声明了没有使用这个问题,是因为编译器把这个变量优化掉了

如果你确实需要这个变量,在定义时加上volatile关键字,以明确告诉编译器不要优化它。

warning: #550-D: variable "key" was set but never used_variable "keycode" was set but never used-CSDN博客

这样警告就没有了,watch也能观察到state了。

补充:

        1、对于局部变量的调试,最好使用call stack+ locals,这个窗口用于查看当前程序调度关系,当出现有进入硬件错误异常调试时可以快速定位到是哪里触发的异常。这个窗口是的调度关系是从当前程序堆栈里获取的数据并将其图形化,所以如果当前堆栈数据被破坏,则此窗口也将无法查看调度关系。
    该窗口里显示的调度关系是从下至上调用的,最上面的表示当前程序所处的函数。展开对应的函数,可以查看各层调用函数跳转之前保存的一些临时变量等信息。

        2、watch窗口注意,只有全局变量可以全程监视,临时变量只有在进入当前函数中才可监视到其数据,用static关键词修饰的变量无法监视。

KIEL 调试那些事儿之窗口展示——变量(二)_wx5d217eb5a181e的技术博客_51CTO博客

断点调试高级技巧,拿大屏幕狠狠看这个小骚技巧!!

https://blog.51cto.com/u_14436836/4893463

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值