2017-03-02 3 views
1

Wie kann ich totalview bieten Zugriff auf alle Variablen in meinem Code?totalview erkennt nur einige Variablen, ausführbare Zeilen

Ich versuche, ein Fortran90-Programm mit TotalView zu debuggen. Ich kompilierte und verknüpfte mit Intels ifort mit dem "-g" -Flag. totalview kann durch mein Programm gehen, bietet aber nur "dive" für vier der Variablen in meiner Subroutine, und viele ausführbare Quellzeilen haben keine Box, die ich überprüfen kann, um einen Aktionspunkt zu setzen. Von allen unten angegebenen Variablen sind nur cell_EW, cell_NS, Bereich und pct verfügbar, um später im Unterprogramm zu tauchen.

164 REAL, allocatable, DIMENSION(:), INTENT(in) :: lon, lat 
165 REAL, ALLOCATABLE, DIMENSION(:, :, :, :) :: area, pct 
166 REAL, ALLOCATABLE, DIMENSION(:, :, :), INTENT(in) :: in_flux 
167 REAL, ALLOCATABLE, DIMENSION(:, :, :), INTENT(inout) :: out_flux 
168 REAL :: cell_EW, cell_NS 
169 INTEGER status, ierr, dimid, nlon, nlat, ntimes 
170 INTEGER i, j, k, LOGDEV, this_var, this_t 
171 INTEGER jdate, jtime, this_date, this_time 

ein weiteres Beispiel: Linie 190 erlaubt mir nicht, einen Aktionspunkt zu setzen, und nTimes ist als Variable unerkannt.

189 CALL calc_land_area(pct, cell_EW, cell_NS, lon, lat, area) 
190 ntimes = SIZE(in_flux, 1) ! first dimension is time 
191 do i = 1, ntimes 
+1

Anders als '-g' welche Compiler-Flags geben Sie an? Ich habe totalview nicht verwendet, aber die FAQ [hier] (https://computing.llnl.gov/tutorials/totalview/#Compiling) sagt, keine Optimierungs-Flags zu verwenden. Standardmäßig denke ich, dass 'ifort'' -O2' verwendet, also sollten Sie versuchen, explizit '-O0' oder ähnliches anzugeben. (eigentlich '-g' kann" -O0 "bedeuten, aber es kann überschrieben werden) –

+0

wow, @ d_1999, du hast es geschafft. Ich hatte diese FAQ gesehen und ein explizites "-O2" -Flag entfernt (und '-g' gesetzt), um zu debuggen, aber es war mir nicht eingefallen, ein explizites' -O0' zu verwenden. Ich habe mit "-O-g" rekompiliert und alle meine Variablen sind jetzt verfügbar. Danke vielmals! Wenn Sie Ihren Kommentar als Antwort hinzufügen, nehme ich ihn gerne an. –

Antwort

2

Wenn Variablen in Prüfwerkzeugen wie gdb und totalview nicht verfügbar sind, liegt es oft daran, dass der Compiler sie optimiert hat. Dies ist bei der Totalview angedeutet faq

Sie Ihr Programm mit Optimierungsflags nicht kompilieren, während Sie es Debuggen sind. Compiler-Optimierungen können Ihr Programm "neu schreiben" und Maschinencode erzeugen, der nicht unbedingt mit Ihrem Quellcode übereinstimmt.

Wie verschiedene Compiler haben unterschiedliche Standardoptimierungsstufen (und möglicherweise -g zusätzliche Implikationen andere als nur einschließlich Symbole aufweisen kann) ist es in der Regel eine gute Idee, ein explizites -O0 oder gleichwertig, um jegliche Optimierung zu deaktivieren aufzunehmen. Einige Compiler (z. B. gfortran-Version> = v4.8) stellen eine spezifische Debugging-Optimierungsebene mit dem -Og-Flag bereit, wie in dieser answer erwähnt. Dies ermöglicht Optimierungen, die keinen Einfluss auf die Debugging-Fähigkeit haben.

Verwandte Themen