第一个问题:您想在调试过程中实时查看某个变量的变化吗?
可以在" view "菜单的" watchwindows "中显示全局变量
例如,要查看u8 adcx值的变化,请执行以下操作:
全速运行后,如下所示。
无法显示! 是什么问题?
此变量是非全局变量。
解决方案:
包含当前断点的函数必须包含此参数,或者是全局变量。
将变量adcx更改为全局变量:
在调试状态下,用鼠标选择变量并右键单击,弹出菜单将添加到“变量”窗口栏中。 也可以添加到watch #1 watch #2。
函数中的局部变量将在j-link硬件上调试,但看不到它们的值吗?
当然可以看
如果有调用堆栈窗口,则可以查看当前函数中所有变量的值。
调用堆栈窗口中不显示值。 什么意思?
意思是没有范围了。
无法显示。
添加violate关键字。
怎么添加? violateint a=0; 接下来就错了
当您查看局部变量的值时,断点将出现在包含该局部变量的函数上,直到程序运行到该位置,才会显示局部变量的值。
第二个问题: Watch1窗口的变量adcx的值不能实时显示吗?
解决方法:
在调试状态下,检查视图周期更新
提高显示的刷新频率,而不是此显示
第三个问题:在调试过程中如何显示局部变量?
只能添加当前变量范围内的变量,例如全局变量。 即使添加了局部变量,它也会在下次调试时从watch窗口中删除,并显示在locals窗口中。 locals窗口是值得查看当前函数内部变量的窗口。
只能添加当前变量范围内的变量,例如全局变量。 即使添加了局部变量,它也会在下次调试时从watch窗口中删除,并显示在locals窗口中。 这个'符号似乎表示这个变量是在上次调试时定义的,其他似乎没有任何作用。 我做过测试。 如果成功记录在watch窗口的全局变量中,则即使该量的物理地址发生变化,调试器也可以在下次调试时准确跟踪并在watch中更新结果。 locals窗口是值得查看当前函数内部变量的窗口。 请不要被误解。 在WATCH窗口中查看内部变量会导致错误。 我误会你了! !
我的理解: Call Stack Local窗口变量会自动添加。 这取决于程序在设置和停止断点的位置有哪些局部变量和表示停止时间的值。 断点的作用域将更改,窗口中的变量名称也将更改。 无法显示程序的执行状态。
上面的照片来自KEIL help文档
进入程序状态时,监视窗口的缺省页面为" locals ",该页面动态显示当前的模块变量,即局部变量和全局变量。 当模块发生更改(即域发生更改)时,属于此模块或域的局部变量不会显示在此窗口页面中。 这就是为什么这个窗口页面会动态显示的原因。
观察窗口的其他页面,例如“watch #1”等。 这里是观察指定变量的地方,可以指定其中一个! 例如,电脑。 指定局部变量时,如果在指定时间点未定义此变量,则此指定变量为"? ”,定义起来,是有价值的。 如果有两个同名的变量,则有两种情况。 第一,域窄的被域宽的拿走意味着无法显示域窄的变量。 第二,域无关。 显示最初出现的局部变量,不显示之后的同名变量。
在调试状态下,用鼠标选择变量并右键单击,弹出菜单将添加到“变量”窗口栏中。 也可以添加到watch #1 watch #2。
call stack是调用堆栈中的值。