我想从Python脚本中实现rbreak
。
最简单的方法是循环遍历所有函数,并将它们的名称与Python中的正则表达式进行比较。
或者如果没有明确的循环有更好的方法,我也很感兴趣。
我希望解决方案能够使用像https://sourceware.org/gdb/onlinedocs/gdb/Symbol-Tables-In-Python.html这样的API,但如果没有示例则很难做到。
答案 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)
瞧。