Ho compilato un codice Fortran, che contiene diversi moduli, utilizzando sia gfortran 4.4 che intel 11.1 e successivamente ho provato a eseguirne il debug utilizzando sia gdb che DDT. In tutti i casi, non riesco a vedere i valori di alcuna variabile dichiarata nei moduli. Queste variabili globali hanno valori, poiché il codice viene eseguito correttamente, ma non riesco a vedere quali sono i valori nei miei debugger. Le variabili locali vanno bene. Ho avuto difficoltà a trovare una soluzione a questo problema altrove online, quindi forse non c'è una soluzione semplice, ma sarà davvero difficile eseguire il debug del mio codice se non riesco a vedere i valori di nessuna delle mie variabili globali.Variabili del modulo Fortran non accessibili nei debugger
risposta
In gdb, provare riferimento le variabili globali con nomi come __ modulename __ variablename
è possibile verificare che questa sia la giusta pressare schema utilizzando nm e grep per trovare uno dei tuoi variabili globali nel simboli del tuo programma.
Se ciò non funziona, assicurati di utilizzare una versione recente di gdb.
Ecco un thread su questo tema: http://gcc.gnu.org/ml/fortran/2005-04/msg00064.html
Questo funziona per visualizzare gli elementi non-array oltre alla compilazione con -O0. Posso stampare variabili globali, ma non riesco ancora a vedere i valori degli array globali. Quando provo a stampare il nome dell'array come __modulename_MOD_arrayname, viene restituito un numero grande apparentemente casuale. Se provo a stampare un elemento dell'array, ottengo -nan (0xf ...). Qualche idea su come ottenere array per stampare correttamente e variabili non array? – rks171
Giusto per notare i miei progressi, ho provato a creare con intel 11.1 (con -O0 questa volta) e debugging con gdb, e tutte le variabili globali e gli array globali vengono stampati correttamente. Ho provato a costruire con g95 e il debugging con gdb e le variabili globali non verranno stampate anche se compilate con -O0 (devo usare la convenzione di denominazione sopra elencata per ottenerle). Ma gli array globali non vengono ancora stampati. Quindi, in sintesi, sembra che si tratti di un problema con gfortran e g95 e non con gdb. E costruire con Intel 11.1 funziona bene. – rks171
Con GDB più recenti (7.2 se non ricordo male), i moduli di debug è semplice. Prendere il seguente programma:
module modname
integer :: var1 = 1 , var2 = 2
end module modname
use modname, only: newvar => var2
newvar = 7
end
È ora possibile eseguire:
$ gfortran -g -o mytest test.f90; gdb --quiet ./mytest
Reading symbols from /dev/shm/mytest...done.
(gdb) b 6
Breakpoint 1 at 0x4006a0: file test.f90, line 6.
(gdb) run
Starting program: /dev/shm/mytest
Breakpoint 1, MAIN__() at test.f90:6
6 newvar = 7
(gdb) p newvar
$1 = 2
(gdb) p var1
No symbol "var1" in current context.
(gdb) p modname::var1
$2 = 1
(gdb) p modname::var2
$3 = 2
(gdb) n
7 end
(gdb) p modname::var2
$4 = 7
(gdb)
Deve essere gdb 7.2 che funzioni perché ho installato 7.1 sul mio sistema e digitando "p modname :: var" risulta ancora "Nessun simbolo nel contesto corrente". Tuttavia, si noti che questo intero problema sembra essere un problema di gfortran e non un problema di gdb, come quando ho creato il mio codice sorgente con intel ifort 11.1, gdb non ha avuto alcun problema nella stampa di una variabile o array locale o globale.Costruire senza ottimizzazione con gfortran ha permesso di stampare variabili globali ma non ancora array globali. – rks171
- 1. Variabili non inizializzate in Fortran 2003
- 2. eventi C#: come le variabili sono accessibili
- 3. Arresta il codice Python nell'errore del modulo (Fortran) usando f2py?
- 4. Variabili nei moduli in PowerShell
- 5. Inserimento di elementi del modulo non visibili nei DataTable
- 6. Rilevamento variabili non impostate nei modelli Django
- 7. Il debugger Python viene eseguito nei generatori?
- 8. Il debugger di Android Studio non mostra le variabili locali
- 9. Variabili del modulo Lazy: può essere fatto?
- 10. CMAKE: Stampa tutte le variabili accessibili in uno script
- 11. nascondi variabili non esistenti in Eclipse java debugger
- 12. Debugger Xcode 7.3 che non mostra variabili di classe personalizzate
- 13. Variabili private nei prototipi ereditati
- 14. Enumerazione di IEnumerable in EF6 nei problemi del debugger Errore "Non è stato possibile valutare bambini"
- 15. I punti di interruzione del debugger di Webstorm non funzionano nei nodejs
- 16. Fortran DEALLOCATE
- 17. Array di stringhe nei bridge Fortran-C che utilizzano iso_c_binding
- 18. conversione del codice MATLAB in Fortran
- 19. Come ottenere un errore del debugger di Chrome quando si lavora su variabili non definite
- 20. Come passare le variabili nei moduli NodeJS?
- 21. Ottieni variabili nei modelli Sfinge
- 22. Variabili Django settings.py nei modelli
- 23. I metodi ES6 ottengono null "questo" e le variabili di classe non sono accessibili
- 24. Apertura di file binari in Fortran: stato, modulo, accesso
- 25. Variabili dinamici nei widget del taccuino IPython e Spyre
- 26. PHP/CodeIgniter - Impostazione delle variabili in __construct(), ma non sono accessibili da altre funzioni
- 27. AVVISO: risorse non accessibili in esecuzione wevtutil
- 28. Errore di compilazione Fortran - riferimento non definito
- 29. Subroutine pure in Fortran - Ottimizzazione del compilatore
- 30. fortran SAVE statement
Stai compilazione con le bandiere -O0 e -G? –
Ho visto questo e quello che ho fatto è stato racchiudere le variabili in un tipo di utente e mantenere un record globale (salvato). Quindi accedi al debugger con% (esempio OT% POINT_COUNT quando OT contiene i miei gobal) – ja72
Per Nick Atoms, la compilazione con -O0 ha fatto il trucco, ma solo per gli elementi non di array. Ho letto che l'ottimizzazione può far sì che le variabili globali non siano accessibili, ma ho pensato che se non sono stati utilizzati flag di ottimizzazione, il compilatore non ha eseguito alcuna ottimizzazione per impostazione predefinita. Apparentemente, ho sbagliato. Tuttavia, non riesco ancora ad accedere a nessuna informazione nei miei array globali. Ancora, vengono letti e assegnati correttamente i valori, ma non riesco a stampare l'intero array o singoli elementi dell'array nel debugger. – rks171