2012-11-26 13 views
6

Ho ricevuto una domanda relativa al debug di un file di Fortran. Così l'ho dichiarato con d (*) automaticamente. Tuttavia durante il debug e la supervisione della matrice mostra solo il primo numero del secondo array e non gli altri 60. (Uso il compilatore Fortran 95 e Visual Studio 2010)Lunghezza array automatica nel debug Fortran e Visual Studio

Come posso visualizzare ancora tutte le variabili dell'array?


Ok qui arriva un esempio per il codice:

ia è un numero intero variabile da routine principale seconda di alcuni parametri di input.

subroutine abc(ia,a,b,c) 
dimension d(*) 

a = d(ia+1) 
b = d(ia+2) 
c = d(ia+3) 

return 
end 

Tuttavia per il debug, è utile conoscere le endities di d (*)

+0

Non capisco cosa hai fatto davvero, credo solo. Mostraci un codice. Si noti che i (*), i cosiddetti array di dimensioni ipotizzate non impostano automaticamente la dimensione dell'array in alcun modo. –

+0

Non è necessario includere la firma nel post - la scheda utente viene aggiunta automaticamente. Leggi [FAQ] (http://stackoverflow.com/faq#signatures) per maggiori dettagli. – Artemix

+0

Poiché è necessario fornire le dimensioni dell'array in qualche modo (ad esempio in un argomento aggiuntivo), è possibile utilizzare matrici regolabili. Invece di 'REAL d (*)' usa 'REAL d (nsize)' dove 'nsize' è un argomento' INTEGER', in cui passi la vera dimensione di 'd' in numero di elementi (' REAL' qui è solo un tipo di dati di esempio). Quindi il debugger dovrebbe essere in grado di mostrarti il ​​contenuto dell'intero array. –

risposta

1

L'unico modo che ho trovato per farlo è quello di utilizzare la finestra Watch e aggiungere un orologio per gli elementi dell'array . Supponiamo che la matrice è chiamato d, poi ho scoperto che guardare le seguenti espressioni mostra i valori nella matrice:

d(2)  ! which just shows the 2nd element in the array 
d(1:10) ! which shows the first 10 elements of the array 
d(1:12:2) ! which shows the odd numbered elements of the array from 1 to 11 

E, naturalmente, per una serie di lunghezza di 60, come si suggerisci avere, allora il espressione

d(61) 

mostrerà quale valore si trova nella posizione di memoria a cui punta l'indirizzo di matrice.

Ovviamente, si dovrebbe dichiarare il proprio array come d(:). Se lo fai, allora il debugger VS mostra l'intero array nella solita finestra Locals.

+0

Gli array automatici sono array locali, non argomenti fittizi. –

+0

Punto preso, Vladimir. –

+0

Altrimenti +1, le matrici di forma presunte saranno migliori, poiché la subroutine conosce la dimensione dell'array. OP non ha mostrato alcun codice, quindi si può solo intuire che parla degli argomenti della procedura. –

Problemi correlati