【问题标题】:How can I get address info on a structure member?如何获取结构成员的地址信息?
【发布时间】:2023-03-10 16:31:01
【问题描述】:

我正在尝试使用 gdb 从调试信息中获取结构成员的地址。

我的问题是我的结构如下:

typedef struct{
  int a;
  int b;
  int c;
}tstructDesc;

tstructDesc myStruct =
{
  1,
  2,
  3,
};

int main()
{
  /* Do something */
}

使用 gdb,我可以使用命令 "info address myStruct" 获取 myStruct 结构的地址,但我想获取成员变量的地址(myStruct.a、myStruct. b,myStruct.c)。我发现了 "ptype myStruct" 命令,它返回结构的定义,我可以从中计算相对地址和绝对地址,但我认为这不是完成任务的有效方法。 p>

你知道其他获取结构成员地址的方法吗?

提前致谢, 塔马斯

【问题讨论】:

  • Tamas 原来 tsstructDexc 将是 3*sizeof(int) 所以 myStruct.a 的地址实际上就是 myStruct 的地址。在 gdb 中,您可以设置断点并执行以下操作: (gdb) p &myStruct 或 (gdb) p &mystruct.a
  • 您给出的解决方案是正确的,但您的意思是“tsstructDexc 将是 3*sizeof(int)?”。要知道结构的大小,您必须使用 sizeof(structname):stackoverflow.com/questions/119123/…

标签: c gcc gdb


【解决方案1】:

在 GDB 中,您可以:

(gdb) print myStruct
$1 = {a = 1, b = 2, c = 3}
(gdb) print &myStruct
$2 = (tstructDesc *) 0x600a58 <myStruct>
(gdb) print &myStruct.a
$3 = (int *) 0x600a58 <myStruct>
(gdb) print &myStruct.b
$4 = (int *) 0x600a5c <myStruct+4>
(gdb) print &myStruct.c
$5 = (int *) 0x600a60 <myStruct+8>

【讨论】:

  • 谢谢,这正是我所需要的。我还没有想到明显的解决方案。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
相关资源
最近更新 更多