eric2013 发表于 2023-9-8 15:55:45

MDK的调试bug,错的有点离谱,程序以及return了还能继续往下跑

MDK版本用的5.3X

简短视频展示:
https://www.bilibili.com/video/BV1Hu4y1y72N

https://www.bilibili.com/video/BV1Hu4y1y72N

static/image/hrline/4.gif
对此问题的进一步深化视频:


系统测试AC5. AC6. IAR和GCC调试效果,MDK AC6不开优化调试乱跳,甚至倒序执行
https://www.armbbs.cn/forum.php?mod=viewthread&tid=120946










eric2013 发表于 2023-9-8 16:19:38

同样的代码,测试下IAR的是否正常。

eric2013 发表于 2023-9-8 17:10:37

IAR开启最高速度优化,调试比MDK强太多了。

之前以为MDK调试也不差,关键时候太掉链子了


庄永 发表于 2023-9-8 20:36:50

应该是优化后,实际执行的代码和C语言的每行代码不是一对一了

mrjiu 发表于 2023-9-8 22:30:08

顶楼上,我也这么觉得。。。有时候开了最高优化,就会出现这样的问题,可以看看汇编具体的实现方式。。。

eric2013 发表于 2023-9-8 22:35:04

mrjiu 发表于 2023-9-8 22:30
顶楼上,我也这么觉得。。。有时候开了最高优化,就会出现这样的问题,可以看看汇编具体的实现方式。。。

大家没有看完我视频,后面还测试了1级优化就乱跳了。晚些时候我将分享个AC5,AC6,IAR和GCC系统测试视频。

Edmund1964 发表于 2023-9-11 20:35:18

这样的情况经常发生, 其实它的问题是你打的断点根本就不在return哪儿,它应该是帮你改成在if的地方,不信你在汇编的窗口看, 你是可以在汇编的窗口打断点的,那个才是实际return的位置
AC6的编译之所以高效,原因是它编译后的思路可能跟码农的是完全不一样, 所以没办法在你要的地方设断点, 比如是retrun, 编译后的代码可能已经跟别的地方共用一个return, 所以没法在你要的return处设断点。

eric2013 发表于 2023-9-11 20:45:00

Edmund1964 发表于 2023-9-11 20:35
这样的情况经常发生, 其实它的问题是你打的断点根本就不在return哪儿,它应该是帮你改成在if的地方,不信 ...
推出了升级版视频。IAR是如何做到指哪打哪

系统测试AC5. AC6. IAR和GCC调试效果,MDK AC6不开优化调试乱跳,甚至倒序执行
https://www.armbbs.cn/forum.php? ... d=120946&fromuid=58
(出处: 硬汉嵌入式论坛)
页: [1]
查看完整版本: MDK的调试bug,错的有点离谱,程序以及return了还能继续往下跑