如何检测函数f
返回false的时刻?
if
包含复杂的varchar
语句,返回true或false,并且为所有部分创建断点的代价很高。
答案 0 :(得分:1)
您可以尝试使用一些Python代码:
SelectListItem
将其保存在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")
文件中,根据您的需要进行修改,然后从GDB中获取,或在finish.py
或python ... end
(python-interactive
)之间运行。< / p>
此代码会创建pi
,每次触发函数FunctionBreakpoint
时触发FunctionBreakpoint.stop
。回调是静默的,只创建一个test
,它在当前帧的末尾停止(即在函数结束时)。第二个停止调用FunctionFinishBreakpoint
,它测试返回值的计算结果是true还是false。如果它“不是真的”,它会告诉GDB停止执行。
文档参考:
(FunctionFinishBreakpoint.stop
为了这个目的被添加到GDB Python界面,我自己: - )
(我上次检查过,这些FinishBreakpoint存在效率问题,如果经常调用你的函数,你可能会注意到它)