Границы Intel Fortran-check не дают номер строки

Я использую компилятор intel fortran (ifort) в среде mpi. Оказывается, мой код имеет переполнение буфера, так как я компилировал его с флагами -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?


person mgilson    schedule 21.02.2013    source источник
comment
Попробуйте использовать -traceback вместе с вашими текущими флагами. Затем компилятор должен сгенерировать дополнительную информацию в объектных файлах, чтобы найти строку исходного кода, в которой возникает ошибка во время выполнения.   -  person milancurcic    schedule 21.02.2013
comment
Я протестирую его и свяжусь с вами через несколько минут, когда код дойдет до проблемного места.   -  person mgilson    schedule 21.02.2013
comment
@IRO-bot - это помогло. Опубликуйте ответ, и я с радостью приму его. Он по-прежнему не заполнил всю таблицу — возможно, потому, что некоторые из этих подпрограмм были закопаны в библиотеке времени выполнения или что-то в этом роде, но он показал мне, где мне нужно искать.   -  person mgilson    schedule 21.02.2013


Ответы (1)


Флаг -traceback может использоваться с компиляторами Intel и Portland Group Fortran для запроса дополнительной информации, которая будет сгенерирована в объектных файлах для трассировки строки и источника. Когда во время выполнения возникает серьезная ошибка, программа попытается сообщить номер строки и исходный файл, в котором произошла ошибка, а также номера строк и исходные файлы из родительских процедур, из которых были сделаны вызовы.

Эквивалентный флаг для gfortran — -fbacktrace.

person milancurcic    schedule 21.02.2013