gdb python编程:如何编写将断点设置到C ++类的每个方法的代码?

时间:2011-06-07 15:06:34

标签: c++ python debugging gdb

我希望能够在gdb中为C ++类的每个方法设置断点。 我认为最简单的方法可能是python,因为现在python可以完全访问gdb。我知道很少的python,并且在它之上使用gdb,它甚至更难。我想知道是否有人知道如何编写一个类python代码,它将断点设置为gdb中命名类的每个方法。

3 个答案:

答案 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。