0

有谁知道为什么在某些地方,gdb 中的 Python 代码不能正确处理异常?或者,为了澄清,异常消息可能会发送到 *gud 缓冲区以外的其他地方。gdb 没有像预期的那样将控制权返回给提示符。

(我在 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__”直到错误的代码,返回,然后继续正常操作(如我所见)。

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

4

1 回答 1

1

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

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

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

于 2016-03-30T18:10:31.280 回答