2013-02-21 125 views
6

我在mpi环境中使用intel fortran编译器(ifort)。事实证明,我的代码在标记为-g -O2 -check bounds时编译了缓冲区溢出。运行一段时间后,我得到这个消息:英特尔Fortran - 检测界限没有给出行号

forrtl: severe (408): fort: (2): Subscript #1 of the array XX has value 4 which is greater than the upper bound of 3 

Image   PC    Routine   Line  Source    
program.exe  00000000006E757E Unknown    Unknown Unknown 
program.exe  00000000006E6016 Unknown    Unknown Unknown 
program.exe  00000000006905B2 Unknown    Unknown Unknown 
program.exe  0000000000642E6B Unknown    Unknown Unknown 
program.exe  0000000000643381 Unknown    Unknown Unknown 
program.exe  00000000005F33FB Unknown    Unknown Unknown 
program.exe  00000000004139E7 Unknown    Unknown Unknown 
program.exe  000000000040A6B4 Unknown    Unknown Unknown 
program.exe  0000000000409D2C Unknown    Unknown Unknown 
libc.so.6  000000380D61ECDD Unknown    Unknown Unknown 
program.exe  0000000000409C29 Unknown    Unknown Unknown 

这是伟大的 - 我现在知道,我超越XX,但在哪里?使用gfortran-fbounds-check会给我一个文件和行号。有什么方法可以通过ifort得到吗?

+1

尝试使用-traceback和您当前的标志。然后,编译器应该在目标文件中生成附加信息,以便在运行时找到发生错误的源代码行。 – milancurcic 2013-02-21 17:34:16

+0

我会对代码进行测试,并在代码到达不利位置时在几分钟内回复您。 – mgilson 2013-02-21 17:36:25

+0

@ IRO-bot - 那就是诀窍。发表一个答案,我会很乐意接受。它仍然没有填满整个表格 - 大概是因为这些“例程”中的某些被嵌入到运行时库或其他东西中,但是它显示了我需要查看的位置。 – mgilson 2013-02-21 18:42:46

回答

6

A -traceback标志可能与英特尔和波特兰集团的Fortran编译器一起使用,以请求在目标文件中为线路和源回溯生成附加信息。当运行时发生严重错误时,程序将尝试报告发生错误的行号和源文件,以及进行调用的父进程的行号和源文件。

gfortran的等效标志是-fbacktrace

相关问题