GDB python Breakpoint类接口和条件断点

时间:2019-07-03 12:17:42

标签: python gdb

我正在使用GDB Python接口来处理断点

import gdb
class MyBP(gdb.Breakpoint):
    def stop(self):
        print("stop called "+str(self.hit_count))
        return True
bp = MyBP("test.c:22")

这按预期工作。 “ stop”方法返回后,hit_count会增加。

现在,当我想使用条件断点时:

bp.condition="some_value==2"

它没有按预期工作。无论条件是true还是false,始终执行stop方法。如果stop方法返回“ True”,则断点将仅在条件也为true时才暂停程序。 Stop方法返回并且条件成立后,hit_count增加。

因此,似乎GDB仅在调用Stop方法之后才应用条件检查。

如何确保仅在条件满足时才调用Stop方法?

1 个答案:

答案 0 :(得分:1)

  

如何确保仅在条件满足时才调用Stop方法?

当前,您不能。请参见// HoC render method render() { return ( <WrappedComponent {...this.props as P} items1={this.state.items1} items2={this.state.items2} /> ); }

中的bpstat_check_breakpoint_conditions()

相关部分:

gdb/breakpoint.c

因此,总是在评估条件之前调用python stop方法。您可以在python中实现您的条件,例如如果要使用源语言编写表达式,请使用 /* Evaluate extension language breakpoints that have a "stop" method implemented. */ bs->stop = breakpoint_ext_lang_cond_says_stop (b); ... condition_result = breakpoint_cond_eval (cond); ... if (cond && !condition_result) { bs->stop = 0; } else if (b->ignore_count > 0) { ... ++(b->hit_count); ... }