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 ();
这对我来说似乎是一个错误 -- 打印堆栈跟踪或其他东西会更有用。
有谁知道为什么在某些地方,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 ();
这对我来说似乎是一个错误 -- 打印堆栈跟踪或其他东西会更有用。