GDB Python API: исключения исчезают?
Кто-нибудь знает, почему в некоторых местах код Python внутри gdb не обрабатывает исключения должным образом? Или, чтобы уточнить, возможно, сообщение об исключении идет куда-то, кроме буфера *gud. GDB не возвращает управление приглашению, как ожидалось.
(Я использую GNU gdb (GDB) 7.11.50.20160212-git в режиме gud Emacs (24.5.1))
Например:
class SomeEvent():
def __init__(self, ...):
... do something ...
def __call__(self):
... do something BAD here ...
gdb.post_event(SomeEvent())
Когда обрабатывается SomeEvent, он просто выполняет "__call__" до плохого кода, возвращает и затем продолжает нормальную работу (как я могу наблюдать).
Я заметил такое поведение в других методах типа "обратного вызова", таких как Stop() из подкласса gdb.Breakpoint.
1 ответ
gdb.post_event
игнорирует исключения, когда вызывается объект события. Вы можете увидеть это ясно в исходном коде, в gdbpy_run_events
:
/* Ignore errors. */
call_result = PyObject_CallObject (item->event, NULL);
if (call_result == NULL)
PyErr_Clear ();
Это кажется мне ошибкой - было бы полезнее вместо этого напечатать трассировку стека или что-то в этом роде.