arm - GDB 无法进入功能,OZone 可以
问题描述
我有这样的设置:
- 来自“GNU Arm Embedded Toolchain”的 GDB 10.3-2021.10
- 来自“Segger JLink”7.54d 的 GDB 服务器
- JLink Ultra+ 连接到我的 PC 和我的嵌入式设备
- Arm 编译器 6.15
我在从 C 模块步入某个函数时遇到问题(我们称之为“F1”)。尝试时,我收到错误消息
Single stepping until exit from function "F1", which has no line number information.
如果我使用具有相同 .elf 文件的 Segger Ozone,则进入“F1”可以正常工作。
我试图缩小问题范围并有以下观察结果:
- 来自 C 模块的一行代码持有“F1”就不同了。如果我删除这条线,它会起作用。此行是静态 uint32_t 变量的简单递增 (++),它位于单独的函数中(即不是“F1”)。
- 如果我不与“--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
解决方案
推荐阅读
- java - Spring Boot 应用程序正在使用 Docker 容器的 Redhat Enterprise Linux 服务器上运行,并且希望在 Windows 上访问该应用程序
- javascript - Websocket 服务器:TypeError ws.send() 不是函数
- java - 选择文本时如何停止 EditText 显示键盘?
- sql - MS SQL 不记录所有事务
- c# - 在 WebAPI 中读取动态对象 FromBody 不起作用
- java - 如何验证包含多个有效 json 请求的 requestbody?
- bash - 正确的 BASH 管道语法
- javascript - 默认情况下设置为活动时在我的图标周围设置边框
- java - CORS Spring Security 配置 - 404 请求的资源上不存在“Access-Control-Allow-Origin”标头
- ios - 在图表的 XAxis 上显示三个标签