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 ();

Это кажется мне ошибкой - было бы полезнее вместо этого напечатать трассировку стека или что-то в этом роде.

Другие вопросы по тегам