如何在GDB中打印可分配的fortran int64数组

问题描述

我知道我可以在GDB中将普通整数数组n+1的第data个元素打印为

print *((integer *)data + n)

但是如果data是可分配的integer(INT64)数组,如何正确打印出元素?

解决方法

注意:在某些不幸的OS或发行版中使用的某些较旧的GDB版本或分支可能无法正确支持可分配阵列。在这种情况下,请使用C语法。

如果旧的GDB无法识别@client.event async def on_message(message): if message.content.startswith('r!help'): channel = message.channel await channel.send('Help') elif message.content.startswith('r!start'): channel = message.channel await script(channel) ,请使用int64_t或任何与64位整数相对应的旧C类型。


你真的可以做

long

使用

 print data(n+1)

是C模式的GDB语法,但是在Fortran模式下,它确实很简单。

如果您真的想要复杂的C语法,即使在Fortran模式下也可以使用它,

 print *((integer *)data + n)

在C模式下( print *((int64_t *)(&data) + n) 之后),您也可以使用

set langauge c

该命令在Fortran模式(print *((int64_t *)data + n) )下不起作用。


示例:

Cannot access memory at address 0x29

gdb:

use iso_fortran_env

integer(int64),allocatable :: data(:)

integer :: n

data = [(i,i=1,100)]

n = 5

continue

end

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...