【发布时间】:2019-12-18 09:05:12
【问题描述】:
我有一个 Fortran 程序,我试图将字符串传递给子例程。下面示例中的代码按预期运行,本身没有错误。但是,编译后: f95 -g test.f95
当使用 GDB 跟踪代码时出现问题。
program test
character(len=4):: my_string="asdf"
call test_routine(my_string)
contains
subroutine test_routine(asdf)
character(len=*) :: asdf
print*, len(asdf)
print*, asdf
return
end subroutine test_routine
end program test
在两个 print* 之间的第 12 行设置断点时,我在 GDB 中运行代码时得到以下输出
Starting program: /home/user/folder/a.out
4
Breakpoint 1, test_routine (asdf=<error reading variable: value requires 4158328176 bytes, which is more than max-value-size>, _asdf=4) at test.f95:13
13 print*, asdf
从输出中可以看出,Fortran 将字符串的 len() 打印为 '4' 但 GDB 将其视为 ~4GiB
这是什么原因造成的?
GDB 版本: GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Fortran (gcc) 版本: gcc 版本 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
【问题讨论】:
-
GDB 应该理解固定长度和假定长度的字符串吗?
-
好的,我知道了。固定长度是,但假定长度不是,因为 gdb 仅支持 Fortran77。
标签: string fortran gdb gfortran subroutine