gdb Python API: исключения исчезают?

Кто-нибудь знает, почему в некоторых местах код Python внутри gdb неправильно обрабатывает исключения? Или, чтобы уточнить, возможно, сообщение об исключении отправляется не в буфер *gud. gdb не возвращает управление подсказке, как ожидалось.

(Я использую GNU gdb (GDB) 7.11.50.20160212-git в режиме Emacs (24.5.1) gud)

Например:

class SomeEvent():
   def __init__(self, ...):
      ... do something ...
   def __call__(self):
      ... do something BAD here ...


gdb.post_event(SomeEvent())

Когда «SomeEvent» обрабатывается, он просто выполняет «__call__» до плохого кода, возвращается и затем продолжает нормальную работу (как я вижу).

Я заметил такое поведение в других методах типа «обратный вызов», таких как Stop() подкласса gdb.Breakpoint.


person Geof Sawaya    schedule 22.03.2016    source источник


Ответы (1)


gdb.post_event игнорирует исключения при вызове объекта события. Вы можете ясно видеть это в исходном коде, в gdbpy_run_events:

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

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

person Tom Tromey    schedule 30.03.2016
comment
Я надеялся, что ты прокомментируешь, Том! Спасибо за подсказку об источнике. Да, лучше показать что-нибудь - person Geof Sawaya; 01.04.2016