打印
[开发工具]

各位高手怎么查看局部变量的值吗?

[复制链接]
4290|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Swd21ic|  楼主 | 2008-9-23 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在IAR中..经常停在一个函数内部.
可它的局部变量和形参不论是拉到Watch中还是直接点出Locals.
状态都是unavailable

但有时候又能够看到值.. 我就很郁闷了..

今天反复试验了一下..发现当使用None优化等级时就可以看到各个局部变量的值.而采用Medium优化则不能看~既前面说的unavailable.

我开始想是不是局部变量被优化了.. 但一查反汇编..发现两者没什么区别.
一个简单的传递2个参数的函数调用..同样是把实参复制给了R1,R0(符合ATPCS).

可为啥Medium就是看不到呢..因为我写代码一般用Medium..相比None能节约40%的Flash空间..

:)
沙发
computer00| | 2008-9-23 21:52 | 只看该作者

那个变量已经过时了吧,所以看不到了……

使用特权

评论回复
板凳
平常人| | 2008-9-23 21:59 | 只看该作者

很可能是这个变量的内容没有被存到RAM中,只保存在寄存器

调试窗口中只能看到保存到存储器中的变量值。

使用特权

评论回复
地板
computer00| | 2008-9-23 22:04 | 只看该作者

不会吧?保存在寄存器中的应该也能看到的哦…只要这个变

例如两个局部变量,一个先用,另一个后用,那么两者可能会被分配在同一个寄存器中哦……
这样当程序运行到后一个变量处时,前一个变量就失效了,那么当然也就显示不出来了……

使用特权

评论回复
5
平常人| | 2008-9-23 22:33 | 只看该作者

嘿嘿,标准C就是不允许构造类型的变量参与整体赋值

使用特权

评论回复
6
Swd21ic|  楼主 | 2008-9-25 22:09 | 只看该作者

re

晕..
搞了半天..还是没人回答..后面怎么都跑题了..

保存在寄存器的值在None优化下是可以看到的.. 在Locals窗口中都只能指名该变量是由哪一个寄存器(例如R0)保存..
只要一用Medium就不行了..

00讲的变量过时也不对..一个局部变量在创建他的函数体内是有生命周期的..

使用特权

评论回复
7
simon21ic| | 2008-9-26 13:24 | 只看该作者

优化的原因

某些变量在优化的条件下,使用完后就用作其他用途了,所以使用完后就看不到了

使用特权

评论回复
8
Again_gyf| | 2008-9-26 19:56 | 只看该作者

oo说的对的好不!

使用特权

评论回复
9
Swd21ic|  楼主 | 2008-9-26 20:58 | 只看该作者

Re

To:netjob
您用的优化是什么级别的??..


我明天再试一下.. 应该不是被用做其他用途了..
刚跳进函数可执行语句第1句好像都看不到..我明天做个验证再说..
把图拿上来..

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

781

帖子

1

粉丝