代码之家  ›  专栏  ›  技术社区  ›  Geof Sawaya

gdb Python API:异常消失?

  •  0
  • Geof Sawaya  · 技术社区  · 10 年前

    有人知道为什么在某些地方,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()。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Tom Tromey    10 年前

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

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

    在我看来,这似乎是一个bug——打印堆栈跟踪或其他东西会更有用。

    推荐文章