如何使用gdb.lookup_type查找本地类型定义

时间:2017-03-23 20:55:26

标签: python c struct gdb

我有一个C静态函数,并在其中定义了一个结构类型。它可能看起来像:

static void do_stuff(parameters...) {
    struct example {
        uint32_t a;
        uint32_t b;
    };
}

我尝试使用python gdb模块来查找这个类型 - gdb.lookup_type('struct example'),但是我收到一个错误,说明没有定义类型。如果我将此结构定义移到此静态函数之外,那么一切都会很好。我想我需要在lookup_type函数中指定block参数。我尝试了gdb.selected_frame()。block()(及其超级块,static_block,global_block),但它对我不起作用。我是python和gdb模块的新手,所以我不确定为什么在这里找不到本地结构类型,即使我将本地块传递给lookup_type。有谁可以帮我解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:0)

我自己想出了一个解决方案,虽然我不确定它是否是最好的解决方案。

我试图检查当前帧的块中的所有符号,并且我发现可以在其中找到本地结构定义。代码可能如下所示:

for symbol in gdb.selected_frame().block():
    if symbol.type.tag == 'example' and symbol.type.code = gdb.TYPE_CODE_STRUCT:
        # do something

希望这对我遇到同样问题的人有用。