为了账号安全,请及时绑定邮箱和手机立即绑定

使用IPython进行分步调试

使用IPython进行分步调试

达令说 2021-03-10 15:10:22
根据我的阅读,有两种方法可以在Python中调试代码:使用传统的调试器,例如pdb或ipdb。它支持诸如cfor continue,nfor step-over,sforstep-into等命令,但是您没有直接访问IPython shell的权限,这对于对象检查非常有用。使用 IPython的通过嵌入代码中的一个IPython的壳。您可以这样做from IPython import embed,然后embed()在您的代码中使用。当您的程序/脚本命中一条embed()语句时,您将进入IPython Shell。这样就可以使用所有IPython好东西对对象进行全面检查并测试Python代码。但是,在使用时,embed()您将无法通过便捷的键盘快捷键逐步完成代码。有什么办法可以将两全其美相结合?IE能够 一步一步的通过与得心应手的pdb / IPDB键盘快捷键你的代码。在任何这样的步骤(例如,在给定的语句上),都可以访问成熟的IPython shell。在MATLAB中进行IPython调试:在MATLAB中可以找到这种“增强调试”类型的示例,在该示例中,用户始终可以完全访问MATLAB引擎/外壳,并且她仍可以逐步浏览代码,定义条件断点等。我已经与其他用户讨论过,这是人们从MATLAB迁移到IPython时最想念的调试功能。在Emacs和其他编辑器中进行IPython调试:我不想让这个问题过于具体,但是我主要在Emacs中工作,所以我想知道是否有任何方法可以将此功能引入其中。理想情况下,Emacs(或编辑器)将允许程序员在代码上的任意位置设置断点,并与解释器或调试器进行通信,以使其在您选择的位置停止,并在该位置提供完整的IPython解释器。
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

ipdb.set_trace()呢?在您的代码中:


import ipdb; ipdb.set_trace()


更新:现在在Python 3.7中,我们可以编写breakpoint()。它的工作原理相同,但也遵守PYTHONBREAKPOINT环境变量。此功能来自此PEP。


这样可以对代码进行全面检查,并且您可以访问诸如c(继续),n(执行下一行),s(进入该点的方法)之类的命令。


请参阅ipdb repo和命令列表。IPython现在称为Jupyter(的一部分)。


ps:请注意,ipdb命令优先于python代码。因此,要写作,list(foo)您需要print(list(foo))或!list(foo)。


另外,如果您喜欢ipython提示符(它的emacs和vim模式,历史记录,完成情况等),由于它基于python提示符工具包,因此很容易为您的项目获得相同的名称。


查看完整回答
反对 回复 2021-03-29
  • 3 回答
  • 0 关注
  • 272 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信