программирование на GDB Python: как написать код, который будет устанавливать точки останова для каждого метода класса C ++? - PullRequest
4 голосов
/ 07 июня 2011

Я хотел бы иметь возможность устанавливать точки останова для каждого метода класса C ++ в gdb.Я думаю, что самый простой способ сделать это, вероятно, Python, так как теперь Python имеет полный доступ к GDB.Я очень мало знаю Python, и с GDB на нем еще сложнее.Мне интересно, если кто-нибудь знает, как написать код Python класса, который устанавливает точки останова для каждого метода именованного класса в GDB.

Ответы [ 3 ]

3 голосов
/ 31 июля 2011

Предполагая, что вы скомпилированы с символами отладки, вам даже не нужен python для этого:

rbreak source.cpp:.
1 голос
/ 07 июня 2011

Edit: Я только что заметил, что вы спрашиваете, как сделать это с классом C ++, а не с Python.К сожалению.Я оставлю ответ в надежде, что он будет полезен любому, кто отлаживает расширение Python ...


Немного погуглив: "1004 * Код Python может манипулировать точками останова через 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.

0 голосов
/ 12 июля 2011

Вы можете сгенерировать (например, используя python) файл .gdbrc со строкой, содержащей 'break C :: foo' для каждой функции вашего класса C, а затем запустить gdb.

...