Ada程序挂起异常,gnatmake

时间:2015-01-11 21:10:12

标签: ada gnat

我遇到了一个挂在异常上的ADA程序的问题。以下是我正在编译的测试程序

$ gnatmake divide_by_zero.adb
gcc -c divide_by_zero.adb
divide_by_zero.adb:6:19: warning: division by zero
divide_by_zero.adb:6:19: warning: "Constraint_Error" will be raised at run time
gnatbind -x divide_by_zero.ali
gnatlink divide_by_zero.ali

我的gnatmake版本是

$ gnatmake --version
GNATMAKE 4.8.3

divide_by_zero.adb的内容是

$ cat divide_by_zero.adb
procedure divide_by_zero is
   result : Integer;
   denominator : Integer;
   begin
      denominator := 0;
      result := 1 / denominator;
   end divide_by_zero;

程序执行的输出是

$ ./divide_by_zero.exe

raised CONSTRAINT_ERROR : divide_by_zero.adb:6 divide by zero
** Program hangs, Ctrl-C does nothing, Ctrl-D does nothing
** I have to go to Task Manager to stop divide_by_zero.exe

我想知道是否有其他人在gonmake版本4.8.3下编译的ADA程序存在问题,挂在任何类型的异常上?我的ADA代码有问题吗?我的安装有问题吗?我目前在cygwin上运行代码。

感谢。

1 个答案:

答案 0 :(得分:2)

在Debian 8,gcc4.9.1中看起来很好并且工作正常(即引发异常并退出:-)。

brian@Gannet:~/Ada/Play$ gnatmake divide_by_zero.adb 
gcc-4.9 -c divide_by_zero.adb
divide_by_zero.adb:6:19: warning: division by zero
divide_by_zero.adb:6:19: warning: "Constraint_Error" will be raised at run time
gnatbind -x divide_by_zero.ali
gnatlink divide_by_zero.ali
brian@Gannet:~/Ada/Play$ ./divide_by_zero

raised CONSTRAINT_ERROR : divide_by_zero.adb:6 divide by zero
brian@Gannet:~/Ada/Play$ 

所以我相信Cygwin的安装已经破了。

可能值得使用Gnat-2014 Libre版进行测试,但我认为由于许可条件,FSF编译器是您的偏好。

或者,至少有两种方法可以获得针对Windows的FSF Gnat编译器。

我只是通过安装gnat-mingw-w64-x86-64并在x86_64-w64-mingw32-gnatmake divide_by_zero.adb(奇怪的是,它构建了一个32位的Windows exe,但该程序包在64位主机上运行,​​如果我重新启动到Windows,则可执行文件运行正常。)

我也听说过有关FSF Gnat / GCC mingw编译器的TDM版本的好消息here根据您是否需要构建32位或64位Windows可执行文件,可以选择。我想你需要下载" Ada支持" package(向下滚动!)和基本编译器。

如果你真的需要cygwin,你可能不得不继续挖掘,或者向cygwin社区报告这个失败并且(礼貌地!)推动回答。如果您这样做,请在此处更新问题。