GDB Python API: создание объекта аппаратной точки останова - PullRequest
0 голосов
/ 28 февраля 2020

API gdb python определяет флаг gdb.BP_BREAKPOINT, который будет использоваться при создании объекта gdb.Breakpoint, но, кажется, не существует флага, позволяющего установить аппаратную точку останова? Я что-то упустил?

Я хотел бы создать объект gdb.Breakpoint, чтобы я мог переопределить метод stop и реагировать на контрольные точки при их срабатывании. Насколько я могу судить, иначе сделать это невозможно.

Интересно, что если я установлю точку останова «нормальным» способом (например, break *0x400123), то gdb.breakpoints() вернется объект. Однако, если я установлю аппаратную точку останова таким же образом (hbreak *0x400123), никакие объекты не будут возвращены. Похоже, это указывает на то, что API python не может напрямую обращаться к точкам останова HW / манипулировать ими?

Использование GDB 8.3.50.20190824-30.fc31 в Fedora 31.

1 Ответ

0 голосов
/ 28 февраля 2020

Не нашел способа сделать это с помощью gdb.Breakpoint, но вместо этого у меня есть обходной путь.

offset = 0x400123

gdb.execute("hbreak *" + hex(offset))

while True:
    gdb.execute("continue")
    value = int(gdb.parse_and_eval("$pc"))
    if value == offset:
        # respond to hardware breakpoint here
    else:
        # something else happened??

Это не идеально, но отвечает моим текущим потребностям.

...