如何使用gdb捕捉函数返回false的时刻?
如何检测函数如何使用gdb捕捉函数返回false的时刻?,gdb,Gdb,如何检测函数bool f()返回false的时刻 f具有复杂的if语句,这些语句返回true或false,为所有部分创建断点的成本很高。您可以尝试使用一些Python代码: import gdb class FunctionFinishBreakpoint (gdb.FinishBreakpoint): def __init__ (self): gdb.FinishBreakpoint.__init__(self, gdb.newest_frame(),
bool f()
返回false的时刻
f
具有复杂的if
语句,这些语句返回true或false,为所有部分创建断点的成本很高。您可以尝试使用一些Python代码:
import gdb
class FunctionFinishBreakpoint (gdb.FinishBreakpoint):
def __init__ (self):
gdb.FinishBreakpoint.__init__(self, gdb.newest_frame(),
internal=True)
self.silent = True
def stop(self):
#print("after: {}".format(int(self.return_value)))
return not int(self.return_value)
class FunctionBreakpoint(gdb.Breakpoint):
def __init__ (self, spec):
gdb.Breakpoint.__init__(self, spec)
self.silent = True
def stop (self):
#print("before")
FunctionFinishBreakpoint() # set breakpoint on function return
return False # do not stop at function entry
FunctionBreakpoint("test")
将其保存在finish.py
文件中,根据您的需要进行编辑并从GDB中获取源代码,或者在python之间运行它。。。结束
或在python interactive中(pi
)
此代码创建一个FunctionBreakpoint
,该断点触发FunctionBreakpoint。每次命中test
函数时,停止。回调是静默的,只创建一个FunctionFinishBreakpoint
,该断点在当前帧的末尾停止(即,在函数的末尾)。第二个stop调用函数finishbreakpoint.stop
,该函数测试返回值的计算结果是否为true或false。如果它是“非真”,它会告诉GDB停止执行
文件参考:
(gdb.FinishBreakpoint
被添加到gdb-Python接口就是为了这个目的,我自己:-)
(上次我检查时,这些FinishBreakpoint存在效率问题,如果经常调用函数,您可能会注意到)的可能重复