【问题标题】:How do I enable post mortem debugging in pydev?如何在 pydev 中启用事后调试?
【发布时间】:2012-08-10 10:06:20
【问题描述】:

每当我的程序引发未处理的异常时,我想让 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()。

【问题讨论】:

  • 我找到了方法,但似乎我无法在 8 小时内回答我自己的问题,所以我想我应该等待。

标签: python debugging pydev


【解决方案1】:

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

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

【讨论】:

  • 哦,这很方便。认为应该有这样的选项,但没有在首选项或调试配置中找到它。感谢您的提示。
  • 这是什么程序?
  • Suspend on uncaught exceptionspdb.post_portem(tb) 不同,pdb.post_portem(tb) 只能在特定情况下调用,并由应用程序的特定逻辑控制。对于所有想要以编程方式执行此操作的人,您能否通过有关 pdb.post_portem(tb) 中的 pdb.post_portem(tb) 的等效信息来扩展您的答案?
  • 我想在 Fabio 的回答中添加您必须实际指定将被捕获的异常类型(“暂停未捕获的异常”上方的长复选框列)。否则在异常发生后主控制台将终止,而交互式控制台(在主控制台下方)将不起作用(显示 [Invalid Frame]: Please select frame to connect the console. 当您键入内容时中)。
【解决方案2】:

好的,过了一会儿我明白了,代码应该是:

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

捕获任何未处理的异常。该方法可以在程序崩溃时以其他方式进入调试模式,如setExceptHook的doc中所述:

应该调用来设置要处理的异常以及是否 应该在未捕获和 捕获异常。

可以接收参数以仅在某些异常情况下停止。

    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 调试器在引发异常后调试程序的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2019-03-01
    • 2013-06-18
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多