2012-04-22 81 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