Ada 程序挂起异常,gnatmake

Ada Program Hangs on Exception, gnatmake

我遇到 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

我想知道是否还有其他人对在 gnatmake 版本 4.8.3 下编译的 ADA 程序挂起 any 类型的异常有疑问?我的 ADA 代码有问题吗?我的安装有问题吗?我目前是 运行 cygwin 上的代码。

谢谢。

在 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 编译器。

或者至少有 2 种方法可以获得一个工作的 FSF Gnat 编译器目标 Windows。

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

我也听说过有关 FSF 的 TDM 构建的好消息 Gnat/GCC 可用的 mingw 编译器 here 根据您需要构建 32 位还是 64 位,有多种选择 Windows 可执行文件。我认为您需要同时下载 "Ada support" 包(向下滚动!)和基本编译器。

如果您确实需要 cygwin,您可能需要继续挖掘,或者向 cygwin 社区报告此失败并(礼貌地!)寻求答案。如果您这样做,请在此处更新问题。