首页 > 解决方案 > GDB 无法进入功能,OZone 可以

问题描述

我有这样的设置:

我在从 C 模块步入某个函数时遇到问题(我们称之为“F1”)。尝试时,我收到错误消息

Single stepping until exit from function "F1", which has no line number information.

如果我使用具有相同 .elf 文件的 Segger Ozone,则进入“F1”可以正常工作。

我试图缩小问题范围并有以下观察结果:

  1. 来自 C 模块的一行代码持有“F1”就不同了。如果我删除这条线,它会起作用。此行是静态 uint32_t 变量的简单递增 (++),它位于单独的函数中(即不是“F1”)。
  2. 如果我不与“--inline”选项链接,它会停止工作——即使使用 (1) 中的“修复”

所有源文件(C 和 C++ 文件的混合)都使用 -g 选项编译。

我可能会尝试在更小的环境中重现它,我可以在这里分享,但在那之前,我希望得到一些提示。

任何事情都值得赞赏。

[更新 2021-11-10] 尝试使用旧/新版本的“GNU Arm Embedded Toolchain”以及“Segger JLink”。同样的问题。

[2021-11-10 更新] 使用的编译器/链接器命令:

armclang -g --target=arm-arm-none-eabi -mcpu=cortex-m33 -mfloat-abi=soft -MMD -Werror -D__STDC_LIMIT_MACROS -I<my_include_paths>

armlink --inline --info=sizes --info=veneers --info=unused --info=totals --map --symbols --scatter=<my_scatter_file> --list=list.txt

标签: armgdbembedded

解决方案


推荐阅读