我希望能够在gdb中为C ++类的每个方法设置断点。 我认为最简单的方法可能是python,因为现在python可以完全访问gdb。我知道很少的python,并且在它之上使用gdb,它甚至更难。我想知道是否有人知道如何编写一个类python代码,它将断点设置为gdb中命名类的每个方法。
答案 0 :(得分:3)
假设您使用调试符号进行编译,您甚至不需要python:
rbreak source.cpp:.
答案 1 :(得分:1)
编辑:我刚刚注意到你要问的是如何使用C ++类,而不是python类。哎呀。我会留下答案,希望对任何调试python扩展的人都有用......
一些谷歌搜索发现:Python code can manipulate breakpoints via the gdb.Breakpoint
class.。
我们可以找到类的所有方法:
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
模块。
答案 2 :(得分:0)
您可以生成(例如使用python)包含行的.gdbrc文件 '打破C :: foo' 对于C类的每个函数,然后启动gdb。