0

主要结构是

struct my_struct 
{
   int x; 
   void* md_template;
   void* md_capture_buff;
   ....
};

当我在做

(gdb) p ((struct my_struct *)dev_base->next->priv)

输出是这样的

$1 = {
 x= 15 '\017'
 md_template = ,
 md_capture_buff =
}

当我使用 p/x 进行操作时:

(gdb) p/x ((struct my_struct *)dev_base->next->priv)

输出是这样的

$1 = {
 x= 0xf;
 md_template =0x410027001a50 ,
 md_capture_buff = 0x41002c0c5490
}

在 gdb-python 中:

python val = gdb.parse_and_eval('((struct my_struct *)dev_base->next->priv)')

python print val

输出是:

$1 = {
 x= 15 '\017'
 md_template = ,
 md_capture_buff =
}  

那么如何在 gdb-python 中写等价于 p/x 呢?或者如何在 python 脚本中获取'md_capture_buff'的地址,而不是打印python val = gdb.parse_and_eval('((struct my_struct *)dev_base->next->priv)').address地址?

4

1 回答 1

0

您可能已关闭“设置打印地址”。我不会这样做的。str 运算符尊重此设置可以说是一个错误。

除了直接调用它之外,没有很好的方法来重现“p/x”。请参阅 gdb.execute。

您可以使用 [] 获取任何字段的值。喜欢

val = something['fieldname']

IMO,通常最好使用 API 而不是 parse_and_eval。也就是说,您可以直接从 Python 进行转换、查找字段等。

于 2013-06-05T13:41:04.810 回答