[开发工具] 调试指针不跳转 0x00

[复制链接]
1899|20
 楼主| updownq 发表于 2024-7-17 23:23 | 显示全部楼层 |阅读模式

在启动文件中更改堆栈大小:




比如图中是512k,可根据硬件情况将堆栈值改大一些。这个小操作目前解决了困扰我的三个问题:

(1)局部变量设置较多,调试时会在HardFault_Handler中的B.   处陷入死循环;

(2)仿真调试时,会在0x000000XX  Mov r0,r0附近一直爬啊爬,不跳转;

(3)仿真调试时,如果选择step over或者Run to Cursor line,,它在某些嵌套了好几层的函数的地方并不会乖乖滴跳过去,而是倔强地进入函数里面单步执行。


kzlzqi 发表于 2024-7-29 15:29 | 显示全部楼层
通常启动文件是一个汇编文件或者C文件,文件名可能是 startup_stm32f4xx.s、startup_stm32f4xx.c 或类似的名字,具体取决于您的开发环境和所使用的微控制器系列。
范德萨发额 发表于 2024-7-29 15:40 | 显示全部楼层
在调试时,如果程序陷入死循环或者不能跳转,通常是由于堆栈溢出或者堆栈损坏造成的。增加堆栈大小可以减少这种情况的发生,因为更大的堆栈空间可以容纳更多的局部变量和调用信息。
elephant00 发表于 2024-7-29 21:33 | 显示全部楼层
指针未初始化
两只袜子 发表于 2024-7-29 21:33 | 显示全部楼层
程序中的逻辑错误可能导致指针未能按照预期的方式被修改。检查所有修改指针值的代码,确保逻辑正确无误。
jcky001 发表于 2024-7-29 21:34 | 显示全部楼层
调试器设置或错误
cr315 发表于 2024-7-29 21:34 | 显示全部楼层
如果其他部分的代码(如缓冲区溢出)损坏了内存,它可能会影响到指针的值。
申小林一号 发表于 2024-7-29 22:35 | 显示全部楼层
感谢分享
喂什么玩意 发表于 2024-7-31 11:42 | 显示全部楼层
根据硬件情况,将堆栈值改大一些。可以将堆栈大小从 2048 字节增加到 8192 字节:
AdaMaYun 发表于 2024-7-31 14:19 | 显示全部楼层
它在某些嵌套了好几层的函数的地方并不会乖乖滴跳过去,而是倔强地进入函数里面单步执行。
gaonaiweng 发表于 2024-8-29 12:15 | 显示全部楼层
如果您使用的是汇编启动文件,可以直接在其中找到定义堆栈大小的部分。
Wordsworth 发表于 2025-3-17 09:23 | 显示全部楼层
Step Over 变 Step Into 可能和编译优化有关,有时候优化后的代码和源码对不上。
Bblythe 发表于 2025-3-17 09:24 | 显示全部楼层
你用的是什么IDE?Keil、IAR 还是 STM32CubeIDE?不同工具可能处理堆栈的方法不一样。
Pulitzer 发表于 2025-3-17 09:25 | 显示全部楼层
解决HardFault问题除了增大堆栈,还有没有其他方法?比如监测栈溢出?
Uriah 发表于 2025-3-17 09:26 | 显示全部楼层
有没有试过在调试时打开堆栈监视功能?有些IDE能显示当前堆栈使用情况,能提前发现问题。
Clyde011 发表于 2025-3-17 09:27 | 显示全部楼层
这个调试问题真的折腾人,之前碰到类似情况,我直接加了个全局变量当"哨兵",检测栈有没有溢出。
公羊子丹 发表于 2025-3-17 09:28 | 显示全部楼层
这个方法确实有效,特别是局部变量多的时候,堆栈太小很容易导致HardFault!
周半梅 发表于 2025-3-17 09:29 | 显示全部楼层
调试的时候不跳转,可能和优化等级有关,试过降低优化级别看看吗?
帛灿灿 发表于 2025-3-17 09:30 | 显示全部楼层
之前也遇到过类似的问题,发现开启FPU后,堆栈消耗变大,改大堆栈后就好了。
童雨竹 发表于 2025-3-17 09:32 | 显示全部楼层
你的问题2和问题3会不会和调试器有关?有些调试器驱动或者IDE的设置也可能影响跳转。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

3508

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部