首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >( gdb ) p/x等价于gdb python脚本?

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

Stack Overflow用户
提问于 2013-06-05 09:35:51
回答 1查看 580关注 0票数 0

主要结构是

代码语言:javascript
复制
struct my_struct 
{
   int x; 
   void* md_template;
   void* md_capture_buff;
   ....
};

当我在做

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

输出如下

代码语言:javascript
复制
$1 = {
 x= 15 '\017'
 md_template = ,
 md_capture_buff =
}

当我用p做这件事时:

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

输出如下

代码语言:javascript
复制
$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

产出如下:

代码语言:javascript
复制
$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没有打印该地址?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-05 13:41:04

你可能有“设置打印地址”关闭。我不会这么做的。可以说,str操作符尊重此设置是一个错误。

除了直接调用"p/x“之外,没有一种很好的复制”p/x“的方法。见gdb.execute。

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

代码语言:javascript
复制
val = something['fieldname']

海事组织,通常更好的做法是使用API而不是parse_and_eval。也就是说,您可以直接从Python转换、查找字段等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16936445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档