gdb Python 编程:如何为 C++ 类的每个方法设置断点?
我想在gdb中为C++类的每个方法设置断点。我觉得用Python来做这个可能是最简单的,因为现在Python可以完全访问gdb。不过我对Python了解得不多,加上gdb,更是难上加难。我想知道有没有人知道怎么写一个Python类的代码,能够在gdb中为指定类的每个方法设置断点。
3 个回答
0
你可以用Python生成一个.gdbrc文件,这个文件里每一行都包含'break C::foo',其中的'foo'是你类C里的每一个函数的名字。然后你就可以启动gdb调试工具了。
1
编辑:我刚注意到你是在问如何用C++类来做这个,而不是用Python。哎呀。为了希望能帮助到任何调试Python扩展的人,我还是把这个答案保留在这里...
稍微搜索一下就能发现:Python代码可以通过gdb.Breakpoint
类来操作断点。
我们可以这样找到一个类的所有方法:
import inspect
class Foo(object):
bar = 1
def baz(self):
print "quoz"
inspect.getmembers(Foo, inspect.ismethod)
# [('baz', <unbound method Foo.baz>)]
把这些结合起来:
def stop_hammertime(klass):
methods = inspect.getmembers(klass, inspect.ismethod)
method_names = [klass.__name__ + m[0] for m in methods]
return [gdb.Breakpoint(m) for m in method_names]
注意:这个代码没有经过测试,因为我没有安装gdb
模块。
3
假设你在编译的时候加上了调试符号,其实你甚至不需要用到python:
rbreak source.cpp:.