【发布时间】:2018-09-04 14:09:13
【问题描述】:
我有一个在嵌入式 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,为什么断点和汇编单步有效,而源单步无效?
【问题讨论】:
-
都是同一目录下的所有源,
gdb可以“看到” -
调试器中会有一个设置“单步时冻结/停止处理器”。飞思卡尔工具倾向于在您使用调试器单步执行时保持中断运行。此外,请确保未启用看门狗。
-
@Lundin 如果有任何问题,会影响所有文件的调试吗?
-
可能是的。嗯...禁用优化?
-
-g3- 你可能没有生成调试信息