问题描述
我知道我可以在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