您好,欢迎进入深圳市颖特新科技有限公司官方网站!

您现在的位置:首页 新闻资讯 >> 新闻头条 >> Keil调试程序如何查看变量
新闻资讯
NEWS INFORMATION

Keil调试程序如何查看变量

发布时间:2019-05-22

第一个问题:调试时候想实时查看某一变量变化?

view 菜单下的 watch windows,全局变量才能查看

比如要查看u8 adcx的值变化,如下:

全速运行后,如下:

无法查看!什么问题?

该变量非全局变量!

解决办法: 
必须是当前断点处所在的函数里面有这个参数才行,或者是全局变量.

将变量adcx改为全局变量:

调试状态下,鼠标选中变量后点右键,弹出的菜单有增加到变量窗口一栏,添加到watch #1 watch #2都可以。

 

函数里面的局部变量用j-link硬件调试,看不到那些值吗?

 

当然可以看 
有个Call Stack的窗口,就可以看当前函数里面的所有变量值.

在call stack的窗口上看不到值 显示<not in scope>,是什么意思?

意思就是不再范围。。。 
无法显示。 

加violate关键字。

 

请问怎么加啊  violate  int a=0;下面都是错误了

 

看局部变量的值,你在该局部变量所在的函数里,打个断点,程序运行到该位置了,才能显示局部变量的值。

 

 

第二个问题:Watch1窗口中变量adcx值不能实时显示?

解决方法:

调试状态下,勾上View->Periodic Window Update

要的不是这个显示,是要提高显示的刷新频率

 

第三个问题:调试时候如何查看局部变量?

watch框内的变量只有在当前变量作用域的才可以添加,例如全局变量。局部变量即使添加后,在下次调试时也会从watch窗口移除,改到locals窗口内显示。locals窗口是查看当前函数处内部变量值得窗口。

 

 watch框内的变量只有在当前变量作用域的才可以添加,例如全局变量。局部变量即使添加后,在下次调试时也会从watch窗口移除,改到locals窗口内显示。这个 ' 符号似乎是表示该变量是上次调试时定义的,好像没其他什么作用。做过测试,只要成功被记录进watch窗口的全局变量,即使该量的物理地址发生了变化,下次调试时调试器也能准确跟踪到,并在watch内刷新结果。locals窗口是查看当前函数处内部变量值得窗口。不要被误导。如果在WATCH窗口看内部变量,会是错误的。误导你的!!!!!!!!!!!!

我的理解:Call Stack + Local窗口变量自动的添加,取决于程序设置断点停止的位置有哪些局部变量和显示停止时刻的值。断点作用域改变,窗口中的变量名也随之改变。程序运行状态无法显示。

上面图片源自于:KEIL help文档

 

当进入程序状态时,观察窗口默认的页面是“locals",这个窗口页面会动态显示当前模块变量(即局部变量和全局变量),一旦模块变了(即 域 变了),属于这个模块(域)的局部变量就不会在在这窗口页面出现的。所以说这个窗口页面是动态显示就是这个原因。

观察窗口的其它页面,如"watch #1"等等,这里是观察指定的变量的地方,可以指定任何一个!,如:PC。当指定某一局部变量时,如果指定的这一时刻没有定义这个变量,这个指定变量就显示为“?????”,当定义后,它就有值。如果有两个同名的变量,有两种情况。第一:域窄的被域广的取当,即不能显示域窄的变量。第二:域没有关系,第一次出现的局部变量被显示,以后的同名变量不能被显示。
调试状态下,鼠标选中变量后点右键,弹出的菜单有增加到变量窗口一栏,添加到watch #1  watch #2都可以。

call stack是调用堆栈里的值。
联系方式0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08