2012-04-22 36 views
7

我編譯了一個Fortran代碼,它包含幾個模塊,同時使用gfortran 4.4和intel 11.1,隨後嘗試使用gdb和DDT進行調試。在所有情況下,我都看不到在模塊中聲明的任何變量的值。這些全局變量具有值,因爲代碼仍然正常運行,但我看不到在調試器中的值。局部變量很好。我很難在其他地方找到解決方案,所以也許沒有簡單的解決方案,但如果我看不到任何全局變量的值,那麼調試我的代碼將會非常困難。Fortran模塊變量無法在調試器中訪問

+0

你跟標誌編譯-O0和-g? – 2012-04-22 01:39:38

+0

我已經看到了這一點,我所做的是將變量放在用戶類型中,並保留一個全局(保存)的記錄。然後你在調試器中訪問%(例如OT包含我的gobals時的OT%POINT_COUNT) – ja72 2012-04-22 01:49:51

+1

對於Nick Atoms,用-O0編譯做了訣竅,但是僅適用於非數組元素。我讀過優化可能導致全局變量不可訪問,但我認爲如果沒有使用優化標誌,那麼編譯器默認沒有進行優化。顯然,我錯了。但是,我仍然無法訪問全局數組中的任何信息。同樣,它們正在被讀入並正確賦值,但是我不能在調試器中打印整個數組或單個元素。 – rks171 2012-04-22 16:17:43

回答

3

在gdb中,嘗試引用帶有名的全局變量,如__ MODULENAME __ VARIABLENAME

您可以檢查,這是使用納米和grep找到在你的全局變量的一個重整方案的權利您程序的符號。

如果這不起作用,請確保您使用的是最新版本的gdb。

下面是關於這個問題的線索:http://gcc.gnu.org/ml/fortran/2005-04/msg00064.html

+1

除了使用-O0進行編譯之外,它還可以顯示非數組元素。我可以打印全局變量,但我仍然看不到全局數組的值。當我嘗試將數組的名稱打印爲__modulename_MOD_arrayname時,會返回一些看似隨機的大數字。如果我嘗試打印數組中的一個元素,我會得到-nan(0xf ...)。任何想法如何讓數組正確輸出以及非數組變量? – rks171 2012-04-22 16:21:16

+1

爲了記錄我的進度,我試着用intel 11.1(這次是-O0)和gdb進行調試,所有全局變量和全局數組都可以正確打印出來。我嘗試用g95構建和使用gdb進行調試,即使使用-O0(我必須使用上面列出的命名約定來獲取它們),全局變量也不會打印出來。但全局陣列仍然不打印出來。總之,它似乎是gfortran和g95的問題,而不是gdb。並與英特爾11.1建設工作正常。 – rks171 2012-04-22 17:03:48

4

對於較新的GDBS(7.2,如果我沒有記錯),調試模塊很簡單。看看下面的程序:

module modname 
    integer :: var1 = 1 , var2 = 2 
end module modname 

use modname, only: newvar => var2 
newvar = 7 
end 

您現在可以運行:

$ 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) 
+1

它必須是gdb 7.2,因爲我在我的系統上安裝了7.1,並且鍵入「p modname :: var」仍然導致「當前上下文中沒有符號」,所以它可以工作。但是,請注意,整個問題似乎是一個gfortran問題,而不是gdb問題,因爲當我使用intel ifort 11.1構建源代碼時,gdb在打印本地或全局變量或數組時沒有問題。沒有使用gfortran進行優化的構建允許打印全局變量,但仍然不是全局數組。 – rks171 2012-04-23 13:11:16