根据我的阅读,有两种方法可以在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解释器.
有没有办法在ipython中进入函数的第一行.我想象的东西看起来像:
%step foo(1, 2)
Run Code Online (Sandbox Code Playgroud)
它运行ipdb并在第一行设置断点foo.
如果我现在想要这样做,我必须转到函数的源代码并添加import ipdb; ipdb.set_trace()一行.