5

每当我的程序引发未处理的异常时,我想让 pydev 进入交互式控制台模式,但我不知道该怎么做。就像它现在的行为一样,会报告异常并立即终止进程。

经过一番搜索,我发现了这个: http://sourceforge.net/tracker/index.php?func=detail&aid=3029746&group_id=85796&atid=577332 建议使用 pydevd.set_pm_excepthook()

但是,当我添加

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

实际上,您不需要以编程方式执行此操作...您可以转到 Debug 透视图 > Pydev 菜单 > Manage Exception Breakpoints

图形用户界面示例

并选中“暂停未捕获的异常”。在大多数情况下,您会想要捕获各种异常(因此选择“全选”),但您也可以选择要单独管理的异常。

对话

于 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 回答