为什么 GDB 认为我的 Fortran 字符串是 ~4GiB
Why does GDB think my Fortran string is ~4GiB
我有一个 Fortran 程序,我试图将字符串传递给子例程。下面示例中的代码按预期运行,本身没有错误。但是,编译后:
f95 -g 测试.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
在第 12 行的两个 print* 语句之间设置断点时,当 运行 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 添加了对假定长度字符串的支持:https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=216a7e6b9e5d2b279276f3bd8c11145a7d9b59ac .
此提交应该是即将发布的 GDB 9 版本的一部分。如果您想提前预览,那么您可以考虑从源代码构建 GDB,说明如下:https://www.gnu.org/software/gdb/ .
说明仅支持 F77 的文档有点过时,对 F90 的支持正在改进,但绝不是完整的。错误报告总是受欢迎的,因为这可以帮助指导下一步应该处理哪些功能。
我有一个 Fortran 程序,我试图将字符串传递给子例程。下面示例中的代码按预期运行,本身没有错误。但是,编译后: f95 -g 测试.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
在第 12 行的两个 print* 语句之间设置断点时,当 运行 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 添加了对假定长度字符串的支持:https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=216a7e6b9e5d2b279276f3bd8c11145a7d9b59ac .
此提交应该是即将发布的 GDB 9 版本的一部分。如果您想提前预览,那么您可以考虑从源代码构建 GDB,说明如下:https://www.gnu.org/software/gdb/ .
说明仅支持 F77 的文档有点过时,对 F90 的支持正在改进,但绝不是完整的。错误报告总是受欢迎的,因为这可以帮助指导下一步应该处理哪些功能。