我在GDB中有一个结构体,我想运行一个脚本来检查这个结构体。在Python GDB中,你可以通过
(gdb) python mystruct = gdb.parse_and_eval("mystruct")
现在我得到了一个名为mystruct的变量,它是一个GDB.Value对象,我可以通过简单地将这个对象作为字典来访问该结构体的所有成员(比如mystruct['member']
)。
问题是,我的脚本不知道某个结构体有哪些成员。所以我想从这个GDB.Value对象中得到键(甚至值)。但是mystruct.values()
和mystruct.keys()
在这里都不起作用。
有没有可能访问这些信息?我认为这是非常不可能的,你不能访问这些信息,但我没有找到它的任何地方。一个dir(mystruct)
显示,我也没有键或值函数。我可以看到所有的成员,通过打印mystruct,但有没有一种方法来获得成员在python?
3条答案
按热度按时间7cwmlq891#
从GDB文档:
你可以这样得到
mystruct
的类型:并通过
tp.fields()
在字段上迭代不需要邪恶的变通办法;- )
**更新:**GDB 7.4刚刚发布。从announcement:
现在,结构和联合类型的类型对象允许使用标准Python字典(Map)方法访问字段。
fxnxkyjh2#
邪恶的解决方法:
我不知道这是否是通用的。作为一个演示,我写了一个最小的例子
test.cpp
现在,我像往常一样运行
g++ -g test.cpp -o test
,并启动gdb test
。ubby3x7f3#
这些天来:
......它变得简单多了,属性是dict中的键-下面是一个示例:
test_struct.c
:然后编译并输入gdb:
...然后在gdb中: