GDB python断点类接口和条件断点

GDB python断点类接口和条件断点,python,gdb,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") 这正如预期的那样有效。“停止”方法返回后,命中计数增加 现在,当我想使用条件断点时: bp.condition="some_value==2" 它

我正在使用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")
这正如预期的那样有效。“停止”方法返回后,命中计数增加

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

bp.condition="some_value==2"
它没有按预期工作。无论条件是真是假,都始终执行stop方法。如果stop方法返回“True”,则仅当条件为True时,断点才会停止程序。停止方法返回且条件保持后,命中计数增加

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

如何确保仅在条件保持时调用Stop方法

如何确保仅在条件保持时调用Stop方法

目前,你不能。请参见
gdb/breakpoint.c

相关部分:

  /* 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);
      ...
    }

因此,总是在计算条件之前调用python stop方法。但是,如果您想用源语言编写表达式,可以用python实现您的条件,例如使用
gdb.parse_和_eval