为什么 GDB 认为我的 Fortran 字符串是 ~4GiB

视窗NT

我有一个 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

在两个打印*之间的第 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 添加了对假定长度字符串的支持: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 的支持正在改进,但绝不是完整的。错误报告总是受欢迎的,因为这可以帮助指导下一步应该处理哪些功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的字符串比较认为'100%'<'70%'?

为什么GDB检查结果因我是否预先检查过字符串而异?

为什么Python解释器认为我的Int输入是字符串?

为什么simplejson认为此字符串是无效的json?

为什么tcl认为空字符串是double?

为什么PHP认为0等于字符串?

为什么 tkinter 认为整数是字符串

为什么我的 php 认为一个数组是一个字符串?

为什么我的MySQL实例认为“'ī”和“ i”是相等的字符?

为什么 R 认为我导入的字符向量是数字?

为什么我的 for 循环返回字符而不是字符串

为什么我不能用xfc4-terminal中的光标删除选定的字符串?但是我可以一一删除选定的字符串

为什么我的函数不返回字符串?

为什么 HttpRequestMessage 解码我的编码字符串

为什么我的字符串不接受空值?

为什么我的字符串比较不起作用?

为什么Django DecimalField让我存储Float或字符串?

为什么JSON在我的字符串中添加+?

为什么我可以给rValue字符串赋值?

为什么我的结构在包含字符串时崩溃?

为什么我不能发出字符串?

为什么我不能匹配字符串?

为什么我的字符串距离总是5?

为什么我的对象的值是函数而不是字符串?

为什么ElementTree重新编码我的字符串?

为什么我的字符串索引超出范围?

为什么我可以解析无效的日期字符串?

为什么我不能逐行遍历字符串对象

为什么我的字符串不会是XOR?