11

我使用 gfortran 4.4 和 intel 11.1 编译了一个包含多个模块的 Fortran 代码,随后尝试使用 gdb 和 DDT 对其进行调试。在所有情况下,我都看不到模块中声明的任何变量的值。这些全局变量具有值,因为代码仍然可以正确运行,但我看不到调试器中的值。局部变量很好。我在网上其他地方找不到解决这个问题的方法,所以也许没有直接的解决方案,但是如果我看不到任何全局变量的值,调试我的代码将非常困难。

4

3 回答 3

6

使用较新的 GDB(如果我没记错的话是 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)
于 2012-04-23T09:50:26.813 回答
3

在 gdb 中,尝试使用 __ modulename __ variablename之类的名称引用全局变量

您可以使用 nm 和 grep 检查这是否是正确的修改方案,以在程序的符号中找到您的全局变量之一。

如果这不起作用,请确保您使用的是最新版本的 gdb。

这是关于这个问题的一个线程:http: //gcc.gnu.org/ml/fortran/2005-04/msg00064.html

于 2012-04-22T02:03:38.077 回答
0

我有同样的问题(GNU gdb 7.9 与 MPI 并行运行)。对我有用的是以下内容:

p __modname_mod_var

即:双下划线,模块名,下划线,mod,变量名。

使用 -gstabs+ 而不是 -g 编译也可以解决一些问题(但不是现在的问题)。

于 2018-10-25T12:01:54.973 回答