我有一个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。有谁可以帮我解决这个问题?谢谢!
答案 0 :(得分:0)
我自己想出了一个解决方案,虽然我不确定它是否是最好的解决方案。
我试图检查当前帧的块中的所有符号,并且我发现可以在其中找到本地结构定义。代码可能如下所示:
for symbol in gdb.selected_frame().block():
if symbol.type.tag == 'example' and symbol.type.code = gdb.TYPE_CODE_STRUCT:
# do something
希望这对我遇到同样问题的人有用。