2013-02-21 7 views
6

Ich verwende den Intel Fortran Compiler (ifort) in einer MPI-Umgebung. Es stellt sich heraus, dass mein Code einen Pufferüberlauf hat, als ich mit den Flags -g -O2 -check bounds kompiliert habe. Nach einer Weile läuft, bekomme ich diese Meldung:Intel Fortran - Check-Grenzen gibt keine Zeilennummer

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 

Das ist großartig - ich weiß jetzt, dass ich XX bin Überholkupplung, aber wo? mit gfortran, -fbounds-check würde mir eine Datei und Zeilennummer geben. Gibt es eine Möglichkeit, dass ich das mit ifort bekommen kann?

+1

Versuchen Sie, -traceback zusammen mit Ihren aktuellen Flags zu verwenden. Der Compiler sollte dann zusätzliche Informationen in Objektdateien generieren, um die Quellzeile zu lokalisieren, in der der Fehler zur Laufzeit auftritt. – milancurcic

+0

Ich teste es aus und melde mich in ein paar Minuten bei Ihnen, wenn der Code die Schwachstelle erreicht. – mgilson

+0

@ IRO-bot - Das hat den Trick gemacht. Post eine Antwort und ich werde glücklich akzeptieren. Es füllte immer noch nicht die ganze Tabelle - Vermutlich, weil einige dieser "Routinen" in der Laufzeitbibliothek oder ähnlichem vergraben waren, aber es zeigte mir, wo ich suchen musste. – mgilson

Antwort

6

Ein Flag -traceback kann mit Fortran-Compilern von Intel und Portland Group verwendet werden, um zusätzliche Informationen anzufordern, die in Objektdateien für Zeilen- und Quell-Traceback generiert werden. Wenn während der Laufzeit ein schwerwiegender Fehler auftritt, versucht das Programm, die Zeilennummer und die Quelldatei, in der der Fehler aufgetreten ist, sowie Zeilennummern und Quelldateien von übergeordneten Prozeduren zu melden, in denen die Aufrufe ausgeführt wurden.

Gleichwertige Flagge für Gfortran ist -fbacktrace.

Verwandte Themen