【问题标题】:Ada Program Hangs on Exception, gnatmakeAda 程序挂起异常,gnatmake
【发布时间】:2015-01-11 21:10:11
【问题描述】:

我遇到了一个挂起异常的 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 上运行代码。

谢谢。

【问题讨论】:

    标签: ada gnat


    【解决方案1】:

    在 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 种方法可以获取针对 Windows 的有效 FSF Gnat 编译器。

    我已经成功地在 Debian 上构建了 Windows 命令行应用程序,只需安装 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 支持”包(向下滚动!)和基础编译器。

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

    【讨论】:

      猜你喜欢
      • 2019-08-02
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多