如何在GDB Python脚本中循环使用C / C ++程序的所有函数来实现rbreak?

时间:2016-12-31 10:25:48

标签: gdb

我想从Python脚本中实现rbreak

最简单的方法是循环遍历所有函数,并将它们的名称与Python中的正则表达式进行比较。

或者如果没有明确的循环有更好的方法,我也很感兴趣。

我希望解决方案能够使用像https://sourceware.org/gdb/onlinedocs/gdb/Symbol-Tables-In-Python.html这样的API,但如果没有示例则很难做到。

1 个答案:

答案 0 :(得分:3)

绝对可以改进文档。 This提供了线索:

The outermost block is known as the global block.
The global block typically holds public global variables and functions.

A gdb.Block is iterable.

所以我们需要做的就是抓住全局块,然后迭代它。

使用以下测试:

int a_global;
int foo() { return a_global; }
int bar() { return foo(); }
int main() { return bar(); }

$ gcc -g t.c && gdb -q ./a.out

(gdb) py
> for sym in gdb.lookup_global_symbol('main').symtab.global_block():
>   print(sym.name, sym.is_function)
^D
('foo', True)
('bar', True)
('main', True)
('a_global', False)

瞧。