无法单步执行源,但组装单步执行和断点正常

时间:2018-09-04 14:09:14

标签: c gcc gdb elf gdbserver

我有一个运行在嵌入式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,为什么断点和装配单步工作而不是源单步工作?

1 个答案:

答案 0 :(得分:0)

您可以提供更多信息以及到目前为止您尝试过的内容。例如,这些目标文件有什么区别?总是一样吗?它们对非用户代码是否具有特定的依赖性,或者它们是否为非用户代码?您是什么调试器选项?基于此,我可以给出基本建议:

-检查符号文件配置的正确性/它们与二进制文件同步并正确加载。

-确保编译后对源代码没有任何更改,因此IDE不会错误地显示最新编译中不存在的代码(不可调试)。

-考虑根据环境(https://docs.microsoft.com/de-de/visualstudio/debugger/just-my-code?view=vs-2017)停用JustMyCode之类的选项

-检查您的调试器选项