(gdb)p / x等效于gdb python脚本?

时间:2013-06-05 09:35:51

标签: python gdb gdb-python

主要结构是

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并没有打扰地址?

1 个答案:

答案 0 :(得分:0)

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

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

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

val = something['fieldname']

IMO通常更好地使用API​​而不是parse_and_eval。也就是说,您可以直接从Python中投射,查找字段等。