如何在函数返回false时使用gdb来捕获?

时间:2016-01-18 16:56:57

标签: gdb

如何检测函数f返回false的时刻?

if包含复杂的varchar语句,返回true或false,并且为所有部分创建断点的代价很高。

1 个答案:

答案 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.pypython ... endpython-interactive)之间运行。< / p>

此代码会创建pi,每次触发函数FunctionBreakpoint时触发FunctionBreakpoint.stop。回调是静默的,只创建一个test,它在当前帧的末尾停止(即在函数结束时)。第二个停止调用FunctionFinishBreakpoint,它测试返回值的计算结果是true还是false。如果它“不是真的”,它会告诉GDB停止执行。

文档参考:

FunctionFinishBreakpoint.stop为了这个目的被添加到GDB Python界面,我自己: - )

(我上次检查过,这些FinishBreakpoint存在效率问题,如果经常调用你的函数,你可能会注意到它)