标签: pdb

使用IPython逐步调试

根据我的阅读,有两种方法可以在Python中调试代码:

  • 使用传统的调试器,如pdbipdb.这支持诸如cfor continue,nfor step-over,sfor step-into等命令,但是你没有直接访问IPython shell,这对于对象检查非常有用.

  • 使用 IPython的通过嵌入代码中的一个IPython的壳.您可以这样做from ipython import embed,然后embed()在您的代码中使用.当您的程序/脚本命中一个embed()语句时,您将被放入一个IPython shell中.这允许使用所有IPython好东西对对象进行全面检查并测试Python代码.但是,在使用时,embed()您无法使用便捷的键盘快捷键逐步完成代码.

有没有办法结合两全其美?即

  1. 能够 使用方便的pdb/ipdb键盘快捷键逐步完成代码.
  2. 在任何此类步骤(例如,在给定语句上),都可以访问完整的IPython shell.

MATLAB中进行IPython调试:

这种类型的"增强调试"的一个例子可以在MATLAB中找到,用户总是可以完全访问MATLAB引擎/ shell,她仍然可以逐步完成代码,定义条件断点等.我与其他用户讨论的内容,这是人们在从MATLAB迁移到IPython时最想念的调试功能.

在Emacs和其他编辑器中进行IPython调试:

我不想让问题太具体,但我主要在Emacs工作,所以我想知道是否有任何方法可以将此功能纳入其中.理想情况下,Emacs(或编辑器)将允许程序员在代码的任何位置设置断点,并与解释器或调试器通信以使其停在您选择的位置,并在该位置引入完整的IPython解释器.

python debugging emacs ipython pdb

156
推荐指数
8
解决办法
9万
查看次数

如何在Python自己的调试器(PDB)中执行多行语句

所以我正在运行一个Python脚本,在其中我通过编写调用Python的调试器PDB:

import ipdb; ipdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

(iPython的PDB版本,虽然我认为它不会产生影响;我只将其用于彩色输出).

现在,当我到调试器时,我想执行多行语句,例如if子句或for循环,但是一旦我输入

if condition:
Run Code Online (Sandbox Code Playgroud)

并点击返回键,我收到错误信息 *** SyntaxError: invalid syntax (<stdin>, line 1)

如何在PDB中执行多行语句?如果不可能有一种解决方法仍然执行if子句或for循环?

python debugging multiline pdb

135
推荐指数
6
解决办法
4万
查看次数

在iPython笔记本中调试的正确方法是什么?

据我所知,%debug magic可以在一个单元格内进行调试.

但是,我有跨多个单元格的函数调用.

例如,

In[1]: def fun1(a)
           def fun2(b)
               # I want to set a breakpoint for the following line #
               return do_some_thing_about(b)

       return fun2(a)

In[2]: import multiprocessing as mp
       pool=mp.Pool(processes=2)
       results=pool.map(fun1, 1.0)
       pool.close()
       pool.join
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:

  1. 我试着设置%debug在cell-1的第一行.但它甚至在执行cell-2之前立即进入调试模式.

  2. 我试图%debug在代码之前添加行return do_some_thing_about(b).但随后代码永远运行,永不停止.

在ipython笔记本中设置断点的正确方法是什么?

python ipython python-2.7 pdb jupyter-notebook

110
推荐指数
9
解决办法
8万
查看次数

将PDB断点放在Python代码中的简单方法?

只是一个方便的问题.我在Visual Studio和XCode等IDE中使用调试器有点被宠坏了.我发现必须键入import pdb; pdb.set_trace()设置断点有点笨拙(我宁愿不在文件顶部导入pdb,因为我可能会忘记并将其保留).

是否有一种更简单的方法在Python代码中设置断点,与您在IDE中看到的一样简单明了?

python pdb

97
推荐指数
8
解决办法
8万
查看次数

如何退出pdb并允许程序继续?

我正在使用pdb模块来调试程序.我想了解如何退出pdb并允许程序继续完成.该程序运行起来计算成本很高,因此我不希望在没有脚本尝试完成的情况下退出.continue似乎不起作用.如何退出pdb并继续我的程序?

python pdb

89
推荐指数
5
解决办法
5万
查看次数

使用nosetests设置断点--pdb选项

nosetests --pdb让我停止错误或失败,但这对我的需求来说已经太迟了.在执行期间单步执行代码可帮助我调试问题所在.

但是,nosetests是有用的,因为它们允许依赖于相对导入的测试(即在包中进行测试).

如何在执行测试之前设置断点?目前我正在使用:

python -m pdb /path/to/my/nosetests testfile.py
Run Code Online (Sandbox Code Playgroud)

这种解决方案是不够的.Nosetests干扰pdb输出,我的键盘控制(例如箭头键)被破坏.

使用import pdb; pdb.set_trace()似乎是一个好主意,但是nosetests阻止了我对pdb控制台的访问.

python testing nose pdb

82
推荐指数
3
解决办法
2万
查看次数

是否有可能从代码进入ipython?

对于我的调试需求,pdb非常好.然而,这将是很大冷却器(和有益的),如果我能进入ipython.这件事有可能吗?

python debugging shell ipython pdb

78
推荐指数
8
解决办法
2万
查看次数

如何操作名称与PDB命令冲突的变量?

无论好坏,我的代码充斥着单字母变量(它是物理学的东西,所以这些字母是有意义的),以及NumPy,我经常与之互动.

在使用Python调试器时,偶尔我会想看看比如说的值n.但是,当我点击时n<enter>,这是PDB命令(n)ext,具有更高的优先级. print n看看它,但我怎么设置它?

python pdb

78
推荐指数
2
解决办法
7977
查看次数

开始使用Python调试器pdb

我想将pdb( Python调试器)添加到我的工具箱中.什么是最好的入门方式?

python pdb

77
推荐指数
2
解决办法
5万
查看次数

python pdb - 跳过循环

如何跳过循环使用pdb.set_trace()

例如,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')
Run Code Online (Sandbox Code Playgroud)

pdb在循环之前提示.我输入一个命令.返回所有1-5个值,然后我希望pdbprint('Done!')执行之前再次提示.

debugging pdb

69
推荐指数
2
解决办法
2万
查看次数