我編譯了一個Fortran代碼,它包含幾個模塊,同時使用gfortran 4.4和intel 11.1,隨後嘗試使用gdb和DDT進行調試。在所有情況下,我都看不到在模塊中聲明的任何變量的值。這些全局變量具有值,因爲代碼仍然正常運行,但我看不到在調試器中的值。局部變量很好。我很難在其他地方找到解決方案,所以也許沒有簡單的解決方案,但如果我看不到任何全局變量的值,那麼調試我的代碼將會非常困難。Fortran模塊變量無法在調試器中訪問
回答
在gdb中,嘗試引用帶有名的全局變量,如__ MODULENAME __ VARIABLENAME
您可以檢查,這是使用納米和grep找到在你的全局變量的一個重整方案的權利您程序的符號。
如果這不起作用,請確保您使用的是最新版本的gdb。
下面是關於這個問題的線索:http://gcc.gnu.org/ml/fortran/2005-04/msg00064.html
除了使用-O0進行編譯之外,它還可以顯示非數組元素。我可以打印全局變量,但我仍然看不到全局數組的值。當我嘗試將數組的名稱打印爲__modulename_MOD_arrayname時,會返回一些看似隨機的大數字。如果我嘗試打印數組中的一個元素,我會得到-nan(0xf ...)。任何想法如何讓數組正確輸出以及非數組變量? – rks171 2012-04-22 16:21:16
爲了記錄我的進度,我試着用intel 11.1(這次是-O0)和gdb進行調試,所有全局變量和全局數組都可以正確打印出來。我嘗試用g95構建和使用gdb進行調試,即使使用-O0(我必須使用上面列出的命名約定來獲取它們),全局變量也不會打印出來。但全局陣列仍然不打印出來。總之,它似乎是gfortran和g95的問題,而不是gdb。並與英特爾11.1建設工作正常。 – rks171 2012-04-22 17:03:48
對於較新的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)
它必須是gdb 7.2,因爲我在我的系統上安裝了7.1,並且鍵入「p modname :: var」仍然導致「當前上下文中沒有符號」,所以它可以工作。但是,請注意,整個問題似乎是一個gfortran問題,而不是gdb問題,因爲當我使用intel ifort 11.1構建源代碼時,gdb在打印本地或全局變量或數組時沒有問題。沒有使用gfortran進行優化的構建允許打印全局變量,但仍然不是全局數組。 – rks171 2012-04-23 13:11:16
- 1. 從C++訪問fortran模塊的變量
- 2. 如何訪問fortran模塊中的私有變量?
- 3. 訪問模塊變量在JavaScript模塊
- 4. 無法訪問模板中的變量
- 5. 訪問類變量模塊方法
- 6. 訪問變量和模塊的方法,在多模塊程序
- 7. 導入模塊後無法訪問模塊中的全局變量
- 8. Fortran:模塊中的可分配變量
- 9. f2py從Fortran模塊中恢復變量
- 10. 一些變量在調試期間無法訪問
- 11. 無法訪問模塊控制器中的模塊表單
- 12. 無法調用訪問會話變量
- 13. 無法訪問Python模塊
- 14. 在模塊類和實例方法中訪問類變量
- 15. 無法在jQuery中訪問變量
- 16. 無法在VBscript中訪問GET變量
- 17. 在synchronized塊中聲明無法訪問的變量 - Java的
- 18. 從代碼中訪問調試變量
- 19. Fortran中模塊使用的模塊的變量範圍
- 20. 訪問模塊級變量,從模塊中的函數中
- 21. Fortran模塊和全局變量
- 22. Python:如何訪問調用模塊中的變量?
- 23. 無法訪問變量
- 24. 無法訪問類變量
- 25. 訪問類變量無法
- 26. setInterval無法訪問變量?
- 27. Javascript變量無法訪問
- 28. Javascript:無法訪問變量
- 29. 無法訪問Canopy中的python模塊?
- 30. 有道模塊內訪問變量,而在父模塊
你跟標誌編譯-O0和-g? – 2012-04-22 01:39:38
我已經看到了這一點,我所做的是將變量放在用戶類型中,並保留一個全局(保存)的記錄。然後你在調試器中訪問%(例如OT包含我的gobals時的OT%POINT_COUNT) – ja72 2012-04-22 01:49:51
對於Nick Atoms,用-O0編譯做了訣竅,但是僅適用於非數組元素。我讀過優化可能導致全局變量不可訪問,但我認爲如果沒有使用優化標誌,那麼編譯器默認沒有進行優化。顯然,我錯了。但是,我仍然無法訪問全局數組中的任何信息。同樣,它們正在被讀入並正確賦值,但是我不能在調試器中打印整個數組或單個元素。 – rks171 2012-04-22 16:17:43