主要结构是
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做这件事时:
(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中编写与p/x等价的代码呢?或者如何在python脚本中获得'md_capture_buff‘的地址,因为python val = gdb.parse_and_eval('((struct my_struct *)dev_base->next->priv)').address没有打印该地址?
发布于 2013-06-05 13:41:04
你可能有“设置打印地址”关闭。我不会这么做的。可以说,str操作符尊重此设置是一个错误。
除了直接调用"p/x“之外,没有一种很好的复制”p/x“的方法。见gdb.execute。
您可以使用[]获取任何字段的值。喜欢
val = something['fieldname']海事组织,通常更好的做法是使用API而不是parse_and_eval。也就是说,您可以直接从Python转换、查找字段等。
https://stackoverflow.com/questions/16936445
复制相似问题