在GDB中调试用MinGW32编译的Ada应用程序

在GDB中调试用MinGW32编译的Ada应用程序,gdb,ada,debug-symbols,mingw32,Gdb,Ada,Debug Symbols,Mingw32,我有一个用MinGW32(gcc-Ada)编译的Ada应用程序(GHDL)。我想在gdb中调试它,但gdb报告Ada运行时没有调试信息,因此我无法捕获异常: (gdb) catch exception Your Ada runtime appears to be missing some debugging information. Cannot insert Ada exception catchpoint in this configuration. (gdb) 有没有办法用调试信息扩展

我有一个用MinGW32(gcc-Ada)编译的Ada应用程序(GHDL)。我想在gdb中调试它,但gdb报告Ada运行时没有调试信息,因此我无法捕获异常:

(gdb) catch exception
Your Ada runtime appears to be missing some debugging information.
Cannot insert Ada exception catchpoint in this configuration.
(gdb) 

有没有办法用调试信息扩展Ada运行时?

您必须安装一个包含调试信息的运行时库版本。(我对Windows和明文32的了解不够,给了您更具体的帮助。)

< P>如果您使用GCC后端从源构建GHDL,您也可以很容易地构建Gnat,只需在代码<添加艾达>启用语言= C、C++、艾达、VHDL< /COD>配置选项。 然后,如果您不太担心性能,您可以添加要生成的
-g
标志,并使用调试信息构建批(gcc、Gnat和ghdl),这将包括Ada-RTS。如果您随后使用此编译器及其RTS重新构建ghdl,那么您应该拥有一个可调试的ghdl编译器,以防止为mingw32构建任何棘手的问题

我不能评论可能的mingw问题,除了建议,如果存在任何问题,您可能会在另一个平台上进行更好的调试-除非您正在寻找的是一个mingw问题。我在Debian上使用了mingw编译器来交叉编译在Windows上运行良好的Ada程序,但我没有尝试以这种方式引导Gnat或ghdl。

您可能遇到了一个问题,与GDB读取Ada相关符号的方式有关(,无法捕获Ada异常)

我使用的修复方法是使用
-readnow

gdb -readnow {executable}
我不知道MinGW32,但我相信如果在GPR文件中包含
-g

package Builder is
   for Default_Switches ("ada") use (“-g”);
end Builder;

该程序与RTS的静态版本相关联,其中包括调试符号。

您好,Brian,您觉得这个问题如何?我没有用:)标记它。我正在为LLVM后端构建GHDL。MinGW没有GCC源,GCC后端需要这些源。GHDL是使用
-g
构建的,但我猜,Ada运行时是在没有它的情况下构建的。我只在运行使用MinGW32/64编译的GHDL时看到了这个问题,但在使用普通gcc/gnat组合构建Debian时却没有看到。我阅读了Ada标签:寻找Ada项目是我首先进入GHDL的原因:具有讽刺意味的是,我遇到的所有问题都在gcc的(微小的)C包装中!如果Simon的答案与您的问题无关,那么有一种方法可以将RTS与您的Ada应用程序(ghdl)一起构建,而无需重建整个编译器的极端选项。。。它包括提供--RTS=。。。选择蚊虫。在Make命令行(或Configure)上转换为什么我不确定。。。如果我发现了,我会更新答案。或者在github上问Tristan…我把对话转到了电子邮件。您是否有GitHub/Gitter帐户?我们可以在那里继续讨论。。。