5

大家好:我从来没有在 Stackoverflow 上发过帖子,但多年来我总是来这里寻求帮助。

我有一个关于使用 STLINK STM32 Discovery board 在 eclipse 中调试的问题。我已经在网上寻找答案并遵循了许多教程,但我似乎仍然无法让它正常工作。我会试试我的运气在这里问。

我已经使用我的编译器和 gdb 服务器正确设置了 eclipse 环境(据我所知)。首先,我确保在 Eclipse 中按调试之前启动服务器。我正在使用 Atollic STLINK gdb 服务器。我在调试时尝试了许多 arm-none-eabi-gdb 类型的 exe,但它们看起来都一样。我的调试配置设置为在端口 61234(Attolic)上使用 arm-none-eabi-gdb。当我按下调试时,程序正确启动并进入 Eclipse 中的调试视图。该程序正确下载到我的发现板。我知道这一点是因为我已经进行了部分调试,并且根据已编译的代码和调试配置启动选项,在“某些”情况下,我已经逐步完成了代码而不会崩溃。代码是板上的一个简单 LED 打开。如果我拔下 USB 电缆并重新插入,我的代码运行良好,

问题在于实际的调试步骤。在我使用 Eclipse 顶部的调试器命令执行一些“步入”之后,99% 的时间 arm-none-eabi-gdb.exe 程序在调试视图中崩溃。在我的 main 函数的第一行到达后,我将尝试进入第一行,我得到 arm-eabi.exe 程序的 windows 崩溃。eclipse 中的调试控制台读取 gdb 错误:.......dwarf2: C10xx Internal Error - unknown CFA rule。现在...根据我在调试配置中设置有关启动选项卡的选项的方式,不同的选项会产生不同的结果,并且已切换以下选项:Halt、resume、break point at : main 等。这次崩溃似乎也依赖于 main 函数中正在编译的代码。

现在,这对 gdb 服务器和 arm-none-eabi-gdb.exe 程序使用哪个编译器有任何依赖性吗?例如,如果我使用 Atollic 与 Keil 与 code sourcery 与 IAR 编译代码,Attollic gdb 服务 + arm-none-eabi-gdb 程序是否能够处理任何已编译的代码?是否有一些缺失的符号没有生成?作为参考,我使用的是 IAR 编译器工具集的 EVAL 版本。如果我使用 STLINK 在嵌入式工作台中创建具有相同代码的项目,则代码可以正常编译和调试。

什么是 CFA 规则?调用帧地址?我没有在我的程序中设置堆栈指针或其他东西吗?我认为 IAR 编译器会处理 cstartup 中的所有垃圾。

任何帮助表示赞赏。

谢谢,LostTime77

4

0 回答 0