5

プログラムが未処理の例外を発生させるたびに pydev を対話型コンソール モードにしたいのですが、その方法がわかりません。現在の動作では、例外が報告され、プロセスはただちに終了します。

いくつかの検索の後、私はこれを見つけました : http://sourceforge.net/tracker/index.php?func=detail&aid=3029746&group_id=85796&atid=577332

ただし、追加すると

import pydevd
pydevd.set_pm_excepthook()

私のコードでは、例外が発生します。

This function is now replaced by GetGlobalDebugger().setExceptHook and is now controlled by the PyDev UI.')
DeprecationWarning: This function is now replaced by GetGlobalDebugger().setExceptHook and is now controlled by the PyDev UI.

しかし:

GetGlobalDebugger().setExceptHook()

動作していないようです。GetGlobalDebugger() はグローバル名前空間に存在しません。

4

2 に答える 2

4

実際には、これをプログラムで行う必要はありません... [デバッグ] パースペクティブ > [Pydev] メニュー > [例外ブレークポイントの管理] に移動できます。

GUI の例

「キャッチされていない例外でサスペンドする」にチェックを入れます。ほとんどの場合、すべての種類の例外をキャッチする必要があります ([すべて選択] を選択します) が、個別に管理する例外を選択することもできます。

ダイアログ

于 2012-08-14T10:57:20.723 に答える
2

さて、しばらくすると明らかなことがわかりました。コードは次のようになります。

import pydevd
pydevd.GetGlobalDebugger().setExceptHook(Exception, True, False)

処理されていない例外をキャプチャします。setExceptHookのドキュメントに記載されているように、このメソッドを他の方法で使用して、プログラムがクラッシュしたときにデバッグモードに入ることができます。

処理する例外を設定し、キャッチされていない例外やキャッチされた例外でブレークするかどうかを設定するために呼び出す必要があります。

一部の例外でのみ停止するパラメータを受け取ることができます。

    E.g.:
        set_pm_excepthook((IndexError, ValueError), True, True)

        or

        set_pm_excepthook(IndexError, True, False)

        if passed without a parameter, will break on any exception

    @param handle_exceptions: exception or tuple(exceptions)
        The exceptions that should be handled.

    @param break_on_uncaught bool
        Whether it should break on uncaught exceptions.

    @param break_on_caught: bool
        Whether it should break on caught exceptions.

これが、例外が発生した後にプログラムをデバッグするためにEclipseでpydevデバッガーを使用したい他の人に役立つことを願っています。

于 2012-08-13T09:50:13.847 に答える