gdb Python API:异常消失了吗?

gdb Python API: exceptions disappearing?

有谁知道为什么在某些地方,Python gdb 中的代码不能正确处理异常?或者,为了澄清,也许是异常消息 正在去 *gud 缓冲区以外的地方。 gdb 不是 returning 控制 到提示符,正如预期的那样。

(我在 Emacs (24.5.1) gud 模式下使用 GNU gdb (GDB) 7.11.50.20160212-git)

例如:

class SomeEvent():
   def __init__(self, ...):
      ... do something ...
   def __call__(self):
      ... do something BAD here ...


gdb.post_event(SomeEvent())

当处理 'SomeEvent' 时,它将只执行 '__call__' 直到错误代码 return,然后继续正常操作(据我观察)。

我在其他 'callback' 类型的方法中注意到了这种行为,例如子类 gdb.Breakpoint 的 Stop()。

gdb.post_event 忽略调用事件对象时的异常。您可以在源代码中清楚地看到这一点,在 gdbpy_run_events:

  /* Ignore errors.  */
  call_result = PyObject_CallObject (item->event, NULL);
  if (call_result == NULL)
    PyErr_Clear ();

这对我来说似乎是一个错误 -- 打印堆栈跟踪或其他东西会更有用。