我正在使用 STM32 Workbench(基于 Eclipse 的 IDE),并且我有一个包含几个 C++ 静态库和 2 个 C++ 应用程序的工作区,所有这些都是使用 STM32F4 MCU C++ 应用程序或静态库模板制作的。
我的第一个申请进展顺利,我开始了第二个。该项目模板添加了一个带有无限循环的 main.c,无论使用哪种语言。如果我尝试调试 main.c 一切都很好,但如果我将文件名更改为 main.cpp (我需要在内部使用 C++ 类)GDB 在调试之前停止并出现错误:
/home/build/work/GCC-5-0-build/src/gdb/gdb/cp-namespace.c:343: 内部错误:cp_search_static_and_baseclasses:断言 `name[prefix_len + 1] == ':'' 失败。
在此之前,对于我的第一个应用程序所需的文件,甚至是第一个应用程序的 main.cpp,我也有很多“没有名为源文件”的错误。
我在 Eclipse Mars 4.5.2 中使用 Stm32 Workbench 1.9 和 GDB 7.10.1
编辑
我认为“无名为源文件”错误表明 GDB 可能加载了错误的文件,因此我尝试创建一个新的工作区,仅包含该应用程序所需的项目,一切正常。不过,将所有项目放在同一个工作区中会很好,我不确定在 2 个工作区中打开 lib 项目是否会有害。
我在 Eclipse 中也遇到了类似的问题,GDB 崩溃了。我在 Eclipse 工作区中有一些旧的断点处于活动状态。从其他项目中删除这些断点后,问题得到解决。
我有信息可以提供,但不是完整的答案。我想添加评论,但我没有代表。还没有这样做。
我能够运行到 main,但是当我设置断点时,我看到与 OP 相同的行为。我的gdb版本是7.11
我注意到,如果我从主机 ssh 到目标并启动 gdb,我不会观察到该行为——我可以设置断点,没问题。如果我通过 Eclipse 执行此操作,我只会看到不良行为。我看到的两种场景之间的一个区别是,当 gdb 通过 Eclipse(通过 ssh)启动时,它使用
--interpreter mi2
选项。
也许这会引发解决方法的想法......
刚刚在使用 ST-LinkV2 时偶然发现了这个问题。
尽管听起来很愚蠢,但解决方案是删除所有项目的
main()
处的断点。