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

时间:2016-06-29 15:34:54

标签: 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) 

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

3 个答案:

答案 0 :(得分:0)

您必须安装运行时库的一个版本,其中包含调试信息。 (我对Windows和MinGW32不太了解,可以为您提供更具体的帮助。)

答案 1 :(得分:0)

如果你是从源代码构建ghdl - 使用gcc后端 - 只需在--enable-languages=c,c++,ada,vhdl配置选项中添加ada,就可以轻松构建Gnat。

然后,如果您不太担心性能,可以将-g标志添加到Make,并使用调试信息构建批次(gcc,Gnat和ghdl),其中包括Ada RTS。如果你然后使用这个编译器及其RTS重新构建ghdl,那么你应该有一个可调试的ghdl编译器 - 除非为mingw32构建任何粗糙的问题。

我不能评论可能的mingw问题,除了暗示,如果有的话,你可能会在另一个平台上更好地调试 - 除非你特意是你正在追逐的mingw问题。我在Debian上使用了mingw编译器来交叉编译在Windows上运行良好的Ada程序,但我还没有试过以这种方式引导Gnat或ghdl。

答案 2 :(得分:0)

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

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

gdb -readnow {executable}

我不知道MinGW32,但我相信如果你在GPR文件中包含-g

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

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