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?
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
Ich teste es aus und melde mich in ein paar Minuten bei Ihnen, wenn der Code die Schwachstelle erreicht. – mgilson
@ 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