根据我的阅读,有两种方法可以在Python中调试代码:
使用传统的调试器,如pdb或ipdb.这支持诸如cfor continue,nfor step-over,sfor step-into等命令,但是你没有直接访问IPython shell,这对于对象检查非常有用.
使用 IPython的通过嵌入代码中的一个IPython的壳.您可以这样做from ipython import embed,然后embed()在您的代码中使用.当您的程序/脚本命中一个embed()语句时,您将被放入一个IPython shell中.这允许使用所有IPython好东西对对象进行全面检查并测试Python代码.但是,在使用时,embed()您无法使用便捷的键盘快捷键逐步完成代码.
有没有办法结合两全其美?即
这种类型的"增强调试"的一个例子可以在MATLAB中找到,用户总是可以完全访问MATLAB引擎/ shell,她仍然可以逐步完成代码,定义条件断点等.我与其他用户讨论的内容,这是人们在从MATLAB迁移到IPython时最想念的调试功能.
我不想让问题太具体,但我主要在Emacs工作,所以我想知道是否有任何方法可以将此功能纳入其中.理想情况下,Emacs(或编辑器)将允许程序员在代码的任何位置设置断点,并与解释器或调试器通信以使其停在您选择的位置,并在该位置引入完整的IPython解释器.
每当我的程序引发未处理的异常时我想让pydev进入交互式控制台模式,但我无法弄清楚如何做到这一点.如现在的行为,报告异常并立即终止该过程.
经过一番搜索,我发现了这个:http: //sourceforge.net/tracker/index.php? func = enter&aid = 3029746&group_id = 85796 &atid = 577332,建议使用pydevd.set_pm_excepthook()
但是,当我添加
import pydevd
pydevd.set_pm_excepthook()
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我得到一个例外:
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.
Run Code Online (Sandbox Code Playgroud)
但:
GetGlobalDebugger().setExceptHook()
Run Code Online (Sandbox Code Playgroud)
似乎不起作用,GetGlobalDebugger()在全局命名空间中不存在.