搜索
bottom↓
回复: 14

请教,程序正常运行没问题,但是单步调试,形参数值被异常修改的原因?

[复制链接]

出0入0汤圆

发表于 2020-9-28 09:07:52 | 显示全部楼层 |阅读模式
开发环境:
IAR + MSP430F5
描述问题:
如题,程序正常运行没问题,但是单步调试,形参数值被异常修改。

以下描述单步调试过程:
首先,刚进入函数,UserProfile形参的值是REG_USER_PROFILE_OPERATOR,是正确的。
其次,进入函数后,执行switch-case跳转到相应的case后,UserProfile形参的值立即变为无效值。

备注:UserProfile只能取值0~3。

以下是我的验证过程:
- 为反之栈溢出,增加栈空间,现象依旧。
-  为防止优化导致改变程序执行流,程序未开启任何优化。
- 为排除中断原因,在这个函数前后关闭/开启中断,现象依旧。


恳请各位指点其中可能存在的原因,感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出45入88汤圆

发表于 2020-9-28 09:25:23 | 显示全部楼层
我觉得单步很蛋痛,我习惯在运行时printf出来。

出190入0汤圆

发表于 2020-9-28 09:37:47 | 显示全部楼层
Mode成员UserProfile也同时观察看看?另外不想程序内部变量被无意篡改,加上const修饰符

出0入0汤圆

 楼主| 发表于 2020-9-28 09:47:59 | 显示全部楼层
knight_sh 发表于 2020-9-28 09:37
Mode成员UserProfile也同时观察看看?另外不想程序内部变量被无意篡改,加上const修饰符 ...

感谢指教。
.Mode.UerProfile寄存器的值是正确的。
将形参UserProfile使用const修饰,我也试过,现象依旧。

出0入54汤圆

发表于 2020-9-28 09:48:10 | 显示全部楼层
如果程序跑着没问题很大概率是被优化掉了,如果后面的程序不再使用这个变量的话

出10入0汤圆

发表于 2020-9-28 09:55:27 | 显示全部楼层
我也觉得把优化调低看看

出0入442汤圆

发表于 2020-9-28 12:26:00 来自手机 | 显示全部楼层
zzhang_hui 发表于 2020-9-28 09:55
我也觉得把优化调低看看

调啥。加个volatile解决各种疑难杂症。

出0入0汤圆

 楼主| 发表于 2020-9-28 14:07:45 | 显示全部楼层
wye11083 发表于 2020-9-28 12:26
调啥。加个volatile解决各种疑难杂症。

这真的神了...
加上volatile调试竟然正确了...
并且,未加volatile修饰,编译器给形参UserProfile分配的是CPU内部寄存器(如上图);加上volatile修饰,编译器给形参volatile分配的是RAM。

想再次请教大神...这里为什么需要使用vovatile修饰,原因是什么?

出0入0汤圆

 楼主| 发表于 2020-9-28 14:08:32 | 显示全部楼层
zzhang_hui 发表于 2020-9-28 09:55
我也觉得把优化调低看看

感谢回复!
如开头,我已经关闭任何编译器优化了。

出0入16汤圆

发表于 2020-9-28 14:10:32 | 显示全部楼层
擦鞋匠 发表于 2020-9-28 14:07
这真的神了...
加上volatile调试竟然正确了...
并且,未加volatile修饰,编译器给形参UserProfile分配的 ...

voliate就是防止优化的,优化级别开太高了,单步运行很多变量都会直接优化掉

出0入0汤圆

发表于 2020-9-28 16:44:07 | 显示全部楼层
现在的编译器,即使不开优化,也会自动的做一些优化

出0入0汤圆

 楼主| 发表于 2020-9-28 19:01:03 | 显示全部楼层
本帖最后由 擦鞋匠 于 2020-9-28 19:03 编辑
蚁族 发表于 2020-9-28 16:44
现在的编译器,即使不开优化,也会自动的做一些优化


是啊,通过这个例子,让我体会深刻!
也给遇到类似这种问题的坛友提个醒吧。

PS:如果这个问题不解决。我会担心我的代码是否哪里存在漏洞,心里会有一个疙瘩。

感谢各位坛友!

出0入0汤圆

发表于 2020-9-28 22:36:36 来自手机 | 显示全部楼层
wye11083 发表于 2020-9-28 12:26
调啥。加个volatile解决各种疑难杂症。

尤其是串口接收数据,记得加volatile

出0入4汤圆

发表于 2020-9-29 08:38:59 来自手机 | 显示全部楼层
我估计楼主的函数没有声明

出0入0汤圆

 楼主| 发表于 2020-9-29 09:00:59 | 显示全部楼层
Romate 发表于 2020-9-29 08:38
我估计楼主的函数没有声明

凭直觉嘛?
那你估计错了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 13:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表