Это можно сделать с помощью интерфейса Python GDB:
import gdb
class MyBreak(gdb.Breakpoint):
def __init__(self, spec):
gdb.Breakpoint.__init__(self, spec)
self.silent = True
def stop(self):
#do whatever you need
return False
MyBreak("secret_check")
Вам нужно быть осторожным с тем, что вы делаете в обратном вызове stop
, не все законно.
Я не имею в виду, что это не будет работать, но может аварийно завершить работу и / или измениться в следующих версиях, например:
def stop(self):
print gdb.selected_thread().is_running() # True
gdb.execute("return 5") #working, but you're not really supposed to do it!
...
В следующей версии 7.4 GDB, FinishBreakpoint
должен быть в состоянии помочь вам с вашими поддельными функциями (просто пример, я его не тестировал):
class MyFinishBreakpoint (gdb.FinishBreakpoint)
def __init__(self, param):
gdb.FinishBreakpoint()
self.param = param
def stop (self):
#change self.param as you want
return False
class MyBreak(gdb.Breakpoint):
def stop(self):
#read parameters according to calling conventions
param = gdb.parse_and_eval("...")
MyFinishBreakpoint(param)
return False