【问题标题】:Intel Fortran -- -check bounds doesn't give line numberIntel Fortran -- 检查边界不给出行号
【发布时间】:2013-02-21 16:09:16
【问题描述】:

我在 mpi 环境中使用 intel fortran 编译器 (ifort)。事实证明,当我使用标志-g -O2 -check bounds 编译时,我的代码出现了缓冲区溢出。运行一段时间后,我收到以下消息:

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 获得吗?

【问题讨论】:

  • 尝试将 -traceback 与您当前的标志一起使用。然后编译器应在目标文件中生成附加信息,以定位运行时发生错误的源代码行。
  • 我会对其进行测试,并在代码到达错误位置时在几分钟内回复您。
  • @IRO-bot -- 成功了。发布答案,我会很乐意接受。它仍然没有填满整个表格——大概是因为其中一些“例程”被埋在运行时库或其他东西中,但它向我展示了我需要查看的地方。

标签: fortran command-line-arguments intel-fortran


【解决方案1】:

-traceback 标志可以与 Intel 和 Portland Group Fortran 编译器一起使用,以请求在目标文件中生成附加信息,以用于行和源回溯。当运行时发生严重错误时,程序将尝试报告发生错误的行号和源文件,以及进行调用的父过程的行号和源文件。

gfortran 的等效标志是 -fbacktrace

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2015-09-02
    • 2012-04-21
    相关资源
    最近更新 更多