今天鱼鹰介绍一个小知识点,那就是如何在调试时进行计算。在开发调试过程中,难免会遇到调试过程中需要临时计算的情况,有些时候可能还需要动态的得到计算结果。很多时候,我们都会打开 Windows 自带的计算器,这确实一种解决方式,但是难免显得麻烦,而对于需要多次计算的情况来说,更是如此。那么是否有更好的解决方式呢?当然有,就是使用 MDK 自带的命令行进行计算。进入调试模式后,MDK 自动会打开一个命令窗口,但估计绝大部分人都不知道这个窗口可以干什么用,今天鱼鹰就介绍一个与此有关的使用,就是计算。
比如输入以下公式(实际上,这里可以使用全局变量计算或当程序停在局部函数时计算局部变量),得到结果为 0x04。
你会发现即使使用括号,也能计算出结果,比 Windows 自带的计算器强。那么现在就看计算结果是否正确了。如果我们的小学数学过关的话,这个结果应该是 5。但结果却是 4,还是按照 16 进制显示的。仔细想想你就知道,这里的计算完全按照 C 的表达式形式进行计算的(命令行下提示 C- style),这样看来计算结果没有问题。那我们尝试使用浮点进行计算:
发现结果是我们想要的,同时计算结果使用十进制显示。这里就需要注意一点,如果说你想计算结果准确,那么使用浮点计算是一个不错的选择,否则你就要确定是否是在验证你的 C 语言表达式是否正确了。我们会想,是否可以设置结果为十进制显示呢?偶然情况下,鱼鹰发现,这个结果显示和局表变量窗口有关:
也就是说,如果局部变量显示为十进制,那么计算结果也是十进制,反之亦然(默认十六进制显示)。所以,现在我们有两种十进制显示方式:1、将局部变量窗口设置为十进制显示 2、使用浮点计算(比如 1 写成 1.0),那么结果一定是十进制。鱼鹰推荐第二种方式,比较方便,同时计算结果也不容易出错。事实上,除此之外,这个命令窗口还可以使用 sizeof,比如我想计算一下 int 的大小,可以这样:
在这里可能不能体现这个命令窗口的优势,但如果说你想计算一个复杂的结构体呢?!
还有如果我们想动态的知道两个变量的差值(或其他表达式)怎么办?正常情况下,我们会选择修改代码,将结果存放至全局变量显示。但今天鱼鹰再介绍一种更简单的显示方式,直接在 Watch 窗口计算:
但是要注意,如果这两个变量修改的很快的话,可能会突然出现一个异常值,所以只能作为一个参考,不能看到一个异常值就认为两个变量有问题。但是暂停调试情况下,计算结果是可以相信的。