2015-01-11 39 views
0

我遇到了挂起异常的ADA程序问题。下面是我与Ada程序挂起异常,gnatmake

$ 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 

我是窝确定是否有其他人在ADA程序下编译了gnatmake版本4.8.3下挂载的任何类型的异常?我的ADA代码有问题吗?我的安装有问题吗?我正在cygwin上运行代码。

谢谢。

回答

2

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

[email protected]:~/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 
[email protected]:~/Ada/Play$ ./divide_by_zero 

raised CONSTRAINT_ERROR : divide_by_zero.adb:6 divide by zero 
[email protected]:~/Ada/Play$ 

所以我相信Cygwin的安装是坏的。

虽然我假设FSF编译器是您的偏好,但由于许可条件,可能需要使用Gnat-2014 Libre版进行测试。

或者,至少有两种方式获得一个工作FSF Gnat编译器针对Windows。

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

我也听说过可用的FSF Gnat/GCC mingw编译器的TDM构建的好东西here根据是否需要构建32位或64位Windows可执行文件,有多种选择可用。我认为你需要下载“Ada支持”包(向下滚动!)和基本编译器。

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