教你看懂 Intel Fortran 的运行时错误
| 分类: intelfortran |
本文转自http://fcode.cn/guide-64-1.html
感谢作者
第一. 什么是运行时错误?(Runtime Error)
运行时错误,是源代码正确地编译链接后,在执行阶段遇到的错误。几乎没有任何程序可以完全的避免运行时错误。它可能发生在某些意想不到的情况下。比如:磁盘满了,内存不够了,文件被只读保护了,杀毒软件拦截了等等。
当然,做为编程人员在没有正式确定代码合格之前,出现运行时错误,最大的可能,还是代码写得有问题。
第二. Intel Fortran 编译后发生运行时错误是什么样子?
一般来说,IVF发生运行时错误以后,像下面这个样子一样:
http://fcode.cn/uploadfile/2014/0426/20140426071830624.gifIntelFortran 的运行时错误" />
通常来说,Visual C++ Runtime Library 这个对话框上的信息对我们没有帮助。这是由于 IVF 的一些运行时库使用了 VC++ 的。咱们可以忽略它。(上图截图也没截完整)
对我们有用的信息,一般在 console 窗口(windows默认为黑色)里显示。
第三. 从运行时错误窗口我们能获得什么信息?
首先我们来看一段代码,它分为两个源代码文件:
main.f90:
sub.f90:
其中 main.f90 书写了主程序,而 sub.f90 书写了若干子程序。在 main 调用了 root_call,然后再调用了 step1_call,最后调用 step2_call,这个函数读入一个整型变量。
当我们运行后,输入一个字母,比如 a,由于 a 无法转换为整型,所以会触发运行时错误。(如上图)
这里也可以看到,代码本身没有问题,但会出现运行时错误。这就是对程序的不恰当使用导致的。(当然我们也可以在代码中予以判断,但常规来说没有这个必要)
上述代码运行后,若输入字母,则会出现运行时错误:
forrtl: severe (59): list-directed I/O syntax error, unit -4, file CONIN$
Image
PC
Routine
Line
Source
console1.exe
01342233
Unknown
Unknown Unknown
console1.exe
013410C0
_STEP2_CALL
11 sub.f90
console1.exe
01341104
_STEP1_CALL
6 sub.f90
console1.exe
01341144
_ROOT_CALL
2 sub.f90
console1.exe
01341031
_MAIN__
3 main.f90
console1.exe
0139F9D2
Unknown
Unknown Unknown
console1.exe
013A031A
Unknown
Unknown Unknown
console1.exe
013A046D
Unknown
Unknown Unknown
kernel32.dll
771FED5C
Unknown
Unknown Unknown
ntdll.dll
772F37EB
Unknown
Unknown Unknown
ntdll.dll
772F37BE
感谢作者
第一. 什么是运行时错误?(Runtime Error)
运行时错误,是源代码正确地编译链接后,在执行阶段遇到的错误。几乎没有任何程序可以完全的避免运行时错误。它可能发生在某些意想不到的情况下。比如:磁盘满了,内存不够了,文件被只读保护了,杀毒软件拦截了等等。
当然,做为编程人员在没有正式确定代码合格之前,出现运行时错误,最大的可能,还是代码写得有问题。
第二. Intel Fortran 编译后发生运行时错误是什么样子?
一般来说,IVF发生运行时错误以后,像下面这个样子一样:
http://fcode.cn/uploadfile/2014/0426/20140426071830624.gifIntel
通常来说,Visual C++ Runtime Library 这个对话框上的信息对我们没有帮助。这是由于 IVF 的一些运行时库使用了 VC++ 的。咱们可以忽略它。(上图截图也没截完整)
对我们有用的信息,一般在 console 窗口(windows默认为黑色)里显示。
第三. 从运行时错误窗口我们能获得什么信息?
首先我们来看一段代码,它分为两个源代码文件:
main.f90:
1 |
program
www_fcode_cn |
2 |
implicit none |
3 |
call root_call() |
4 |
end program www_fcode_cn |
sub.f90:
01 |
subroutine
root_call() |
02 |
call step1_call() |
03 |
End Subroutine root_call |
04 |
|
05 |
subroutine
step1_call() |
06 |
call step2_call() |
07 |
End Subroutine step1_call |
08 |
|
09 |
subroutine
step2_call() |
10 |
integer ::
i |
11 |
read(*,*)
i |
12 |
End Subroutine step2_call |
其中 main.f90 书写了主程序,而 sub.f90 书写了若干子程序。在 main 调用了 root_call,然后再调用了 step1_call,最后调用 step2_call,这个函数读入一个整型变量。
当我们运行后,输入一个字母,比如 a,由于 a 无法转换为整型,所以会触发运行时错误。(如上图)
这里也可以看到,代码本身没有问题,但会出现运行时错误。这就是对程序的不恰当使用导致的。(当然我们也可以在代码中予以判断,但常规来说没有这个必要)
上述代码运行后,若输入字母,则会出现运行时错误:
forrtl: severe (59): list-directed I/O syntax error, unit -4, file CONIN$
Image
console1.exe
console1.exe
console1.exe
console1.exe
console1.exe
console1.exe
console1.exe
console1.exe
kernel32.dll
ntdll.dll
ntdll.dll

加载中…