2013-02-21 7 views
6

Sto utilizzando il compilatore fortran intel (ifort) in un ambiente mpi. Si scopre che il mio codice ha un buffer overflow come ho compilato con le bandiere -g -O2 -check bounds. Dopo aver eseguito un po ', ottengo questo messaggio:Intel Fortran - i limiti di controllo non forniscono il numero di riga

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 

Questo è grande - ora so che sto sorpasso XX, ma dove? usando gfortran, -fbounds-check mi darebbe un numero di file e di linea. C'è un modo che posso ottenere che con ifort?

+1

Provare a utilizzare -traceback insieme ai flag correnti. Il compilatore dovrebbe quindi generare informazioni aggiuntive nei file oggetto per individuare la riga di origine in cui si verifica l'errore in fase di esecuzione. – milancurcic

+0

Lo verificherò e tornerò tra pochi minuti quando il codice raggiunge il punto sbagliato. – mgilson

+0

@ IRO-bot - Questo ha fatto il trucco. Pubblica una risposta e accetterò felicemente. Non ha ancora riempito l'intero tavolo - Presumibilmente perché alcune di quelle "routine" sono state nascoste nella libreria di runtime o qualcosa del genere, ma mi ha mostrato dove dovevo guardare. – mgilson

risposta

6

Un flag -traceback può essere utilizzato con i compilatori Fortran Intel e Portland Group per richiedere informazioni aggiuntive da generare nei file oggetto per il traceback di linea e origine. Quando si verifica un errore grave durante il runtime, il programma tenterà di riportare il numero di riga e il file di origine in cui si è verificato l'errore, oltre ai numeri di riga e ai file di origine dalle procedure padre in cui sono state effettuate le chiamate.

Flag equivalente per gfortran è -fbacktrace.

Problemi correlati