Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打印与gdb中内置类型同名的Fortran变量_Fortran_Gdb - Fatal编程技术网

打印与gdb中内置类型同名的Fortran变量

打印与gdb中内置类型同名的Fortran变量,fortran,gdb,Fortran,Gdb,据我所知,这是有效的Fortran代码: program main implicit none type foo character(len=7) :: int = "Hello, " end type foo type(foo) :: f character(len=5) :: character = "World" character(len=1) :: real = "!" print *,f%int print *

据我所知,这是有效的Fortran代码:

program main
implicit none

type foo
    character(len=7) :: int = "Hello, "
end type foo

type(foo) :: f
character(len=5) :: character = "World"
character(len=1) :: real = "!"

print *,f%int
print *,character
print *,real

end program
它在gfortran 9.3中编译,并给出预期的输出

但是,gdb(版本8.2)拒绝打印单个变量:

(gdb) p real
Attempt to use a type name as an expression
(gdb) p f%int
A syntax error in expression, near `int'.
(gdb) info locals
character = 'World'
f = ( int = 'Hello, ' )
real = '!'
我可以列出所有变量:

(gdb) p real
Attempt to use a type name as an expression
(gdb) p f%int
A syntax error in expression, near `int'.
(gdb) info locals
character = 'World'
f = ( int = 'Hello, ' )
real = '!'
int
是一个奇怪的情况,因为int在Fortran中实际上不是一个类型名,名为
int
的局部变量可以由gdb打印。但无法打印示例中名为
int
的结构成员。如果局部变量
int
不存在,
p int
会产生与
p real
相同的错误消息,因此我怀疑它是连接的。这也是我遇到问题的原因,因为我正在使用的代码库有一个包含成员
int
的结构,它聚合并隐藏了一些我想要查看的内部数据

我尝试了9.2版,并且
f%int
是可打印的。其他的都一样


我意识到这些变量名是有问题的,但是除了更改它们(这在这个特定的代码库中很困难)之外,有没有办法让gdb打印这些变量?

作为一种解决方法,您可以执行
p CHARACTER
p REAL
,如果您还没有启用区分大小写功能,那么旧gdb版本中肯定存在一个bug——除了升级gdb之外,您还可以尝试使用Python API绕过表达式解析,看看它是否有帮助。