我在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运行时?
答案 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的静态版本链接,其中包括调试符号。