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