在GDB中打印Fortran多态导出数据类型中的值

我正在尝试使用gdb调试以下代码

(GNU gdb(Ubuntu / Linaro 7.4-2012.04-0ubuntu2.1)和gfortran

(
gcc-Version 4.6.3).如果我启动gdb并逐步执行子例程

好玩,我想打印派生类型“mytype”的变量

模块class_test.打印变量“int”也很容易

在模块“class_test”中使用命令:print class_test :: int.

我的问题是如何在gdb中打印变量int1,int2 … int4

逐步完成子程序的乐趣?

!类定义

  module class_test


 integer :: int = 1


 type, public :: mytype

    private

    integer :: int1  = 2

    integer :: int2  = 3

    integer :: int3  = 4

    integer :: int4  = 5

  contains


  procedure, pass(this) :: fun

  end type mytype

  contains

  subroutine fun ( this )

  class(mytype) :: this

  write (*,*) "subroutine" 

  end subroutine fun

  end module class_test


  !! Program
  program test 

 use class_test

 type(mytype) :: struct

 write (*,*) "whateveryouwant"

 call struct%fun()


  end program

最佳答案 这是可能的,但我认为你不能避免手动检查内存.我采取了以下步骤:

(gdb) break class_test::fun
(gdb) run
(gdb) info args

这揭示了与虚拟关联的参数结构的名称和地址:

this = ( 0x601080 <struct>, 0x400ae0 <__class_test_MOD___vtab_class_test_Mytype> )

尝试打印甚至制表符完成结构会导致gdb对我来说是段错误.所以我使用(Fortran 2008)函数storage_size来发现这需要128位内存.打印从地址0x601080开始的四个4字节块的内容,格式为无符号整数:

(gdb) x/4u 0x601080

输出为

0x601080 <struct.1905>: 2       3       4       5

显示struct包含预期的整数2,3,4和5.

当然,如果派生类型包括各种数据类型甚至其他派生类型,这可能不是那么容易.

点赞