0

特定の場所で、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() など、他の「コールバック」タイプのメソッドでこの動作に気付きました。

4

1 に答える 1

1

gdb.post_eventイベント オブジェクトが呼び出されたときに例外を無視します。これは、次のソース コードで明確に確認できますgdbpy_run_events

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

これはバグのように思えます。代わりにスタック トレースなどを出力する方が便利です。

于 2016-03-30T18:10:31.280 に答える