不能单步执行,但程序集单步和断点工作正常

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代码设置断点单步调试能够走通,得到结果;但取消断点直接运行就不行了?

c语言中啥叫做单步调试,步骤是啥???

在 Chrome 中单步执行 JavaScript 断点时如何查看 DOM?

Eclipse 单步调试

GDB调试指南-单步调试

gdb调试