【问题标题】:cannot single-step source but assembly single-step and breakpoints work ok不能单步源,但汇编单步和断点工作正常
【发布时间】: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 - 你可能没有生成调试信息

标签: c gcc gdb elf gdbserver


【解决方案1】:

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

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

-确保编译后源代码没有变化,这样IDE就不会错误地显示你最近编译中不存在的代码(不可调试)。

-考虑停用 JustMyCode 等选项 - 取决于您的环境 (https://docs.microsoft.com/de-de/visualstudio/debugger/just-my-code?view=vs-2017)

-检查您的调试器选项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2021-07-30
    • 2014-03-18
    • 2011-10-28
    • 2023-03-19
    相关资源
    最近更新 更多