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
?
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
Lo verificherò e tornerò tra pochi minuti quando il codice raggiunge il punto sbagliato. – mgilson
@ 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