使用GDB在Eclipse中调试STMF4 Discovery

use*_*619 5 eclipse gdb

大家好:我从未在Stackoverflow上发布过,但多年来我一直都来这里寻求帮助.

我在使用STLINK STM32 Discovery板进行eclipse调试时遇到了问题.我已经在网上寻找答案并且已经遵循了许多教程,但我似乎仍然无法让它正常工作.我会在这里问我的运气.

我已经使用我的编译器和gdb服务器正确设置了eclipse环境(据我所知).首先,我确保在我在eclipse中按下调试之前启动服务器.我正在使用Atollic STLINK gdb服务器.我在调试时尝试过很多arm-none-eabi-gdb类型的exe,但它们看起来都是一样的.我的调试配置设置为在端口61234(Attolic)上使用arm-none-eabi-gdb.当我按下debug时,程序正确启动并进入eclipse的调试视图.该程序正确下载到我的发现板.我知道这是因为我已经调试部分工作并且已经逐步完成代码而不会在"某些"情况下崩溃,具体取决于编译的代码和调试配置启动选项.代码是板上的简单LED开启.如果我拔掉usb线并重新插入,我的代码运行正常,因为LED亮起,所以我们知道环境可能设置正确,因为代码通过eclipse命令下载到flash.

问题在于实际的调试步骤.99%的时候arm-none-eabi-gdb.exe程序在调试视图中崩溃后,我用eclipse顶部的调试器命令做了一些"步入".在我的主要功能的第一行到达后,我将尝试进入第一行,我得到arm-eabi.exe程序的Windows崩溃.eclipse中的调试控制台读取gdb错误:....... dwarf2:C10xx内部错误 - 未知的CFA规则.现在......根据我在调试配置中如何设置启动选项卡中的选项,不同的选项会产生不同的结果,并且以下选项已被切换:暂停,恢复,断点位于:main等.此崩溃似乎也依赖于在main函数中编译的代码.

现在,这是否依赖于哪个编译器与gdb服务器和arm-none-eabi-gdb.exe程序一起使用?例如,如果我使用Atollic与Keil编译代码而不是代码源代码而不是IAR,那么Attollic gdb服务+ arm-none-eabi-gdb程序是否能够使用任何已编译的代码?是否有某些遗漏符号未生成?作为参考,我使用的是IAR编译器工具集的EVAL版本.如果我使用STLINK在嵌入式工作台中使用相同的代码创建项目,则代码编译和调试很好.

什么是CFA规则?呼叫帧地址?我没有在程序中设置堆栈指针或其他东西吗?我以为IAR编译器负责处理cstartup中的所有垃圾.

任何帮助表示赞赏.

谢谢,LostTime77