不能单步执行,但程序集单步和断点工作正常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不能单步执行,但程序集单步和断点工作正常相关的知识,希望对你有一定的参考价值。
我有一个在嵌入式ARM M4上运行的C应用程序;它工作正常。
我使用Kinetis Design Studio,它使用gdb
作为Windows上的调试器。
对于我的大多数.obj
,我可以单步执行C源代码。但是,对于一些文件,虽然我可以使用断点,但单步执行C源代码不起作用:按Single-step
会导致调试器的行为就好像我按下Run
但应用程序肯定没有运行。
但单步执行程序集,相同的.obj
文件,正常工作。
我为所有.c
使用相同的编译选项
-x c -Wall -Werror -std=c99 -nostdlib -mthumb -mtune=cortex-m4 -mlittle-endian -Wdouble-promotion -DNDEBUG -fdata-sections -ffunction-sections -c -save-temps=obj -g3 -gdwarf-2
题
对于一些.obj
,为什么断点和装配单步工作但不是源单步?
您可以提供更多信息以及您目前为止所尝试的内容。例如,那些目标文件有什么区别?它总是一样吗?他们是否具有与非用户代码的特定依赖关系,还是非用户代码?你有什么调试器选项?基于此,我可以提出基本建议:
- 检查符号文件配置的正确性/它们是否与二进制文件同步并正确加载。
- 确保编译后源代码没有变化,因此IDE不能错误地显示最新编译中不存在的代码(不可调试)。
- 考虑停用JustMyCode等选项 - 取决于您的环境(https://docs.microsoft.com/de-de/visualstudio/debugger/just-my-code?view=vs-2017)
- 检查调试器选项
以上是关于不能单步执行,但程序集单步和断点工作正常的主要内容,如果未能解决你的问题,请参考以下文章
为啥这段js代码设置断点单步调试能够走通,得到结果;但取消断点直接运行就不行了?