Не дубликат this question, так как я работаю через интерфейс python в gdb.
This one аналогичен, но не имеет ответа.Выполнение команд в точке останова в gdb через интерфейс python
Я расширяя gdb.breakpoint в питона так, что он записывает некоторые регистры в файл, а затем переходит к адресу: в 0x4021ee
, я хочу писать вещи в файл, а затем перейти к 0x4021f3
Однако , ничего в command
никогда не выполняется.
import gdb
class DebugPrintingBreakpoint(gdb.Breakpoint):
def __init__(self, spec, command):
super(DebugPrintingBreakpoint, self).__init__(spec, gdb.BP_BREAKPOINT, internal = False)
self.command = command
def stop(self):
with open('tracer', 'a') as f:
f.write(chr(gdb.parse_and_eval("$rbx")^0x71))
f.close()
return False
gdb.execute("start")
DebugPrintingBreakpoint("*0x4021ee", "jump *0x4021f3")
gdb.execute("continue")
Если я явно добавить gdb.execute(self.command)
к концу stop()
, я получаю Python Exception <class 'gdb.error'> Cannot execute this command while the selected thread is running.:
Кто-нибудь есть рабочий пример списка команд с точки останова в питона GDB?