打印与gdb中内置类型同名的Fortran变量
据我所知,这是有效的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 *
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绕过表达式解析,看看它是否有帮助。