如何在调试时让ipdb显示更多上下文行?

fas*_*ion 40 python debugging ipython

默认情况下,在IPython中调试期间,ipdb在代码中显示当前位置上方的一行和一行.

是否有一种简单的方法可以使区域显示更大?我认为它是可配置的,但一直无法找到它.

Ane*_*pic 41

您可以键入lipdb以显示当前上下文的几行

并且您可以继续点击l并继续从文件中显示更多行

如果要在当前行周围显示更多上下文行,可以键入l以获取当前行.然后输入l curr_line - 10, curr_line + 10.说我在第50行,我想看到周围的20行.我会打字:l 40,60看到更多.

正如@jrieke在评论中指出的那样,你也ll可以获得更大的上下文.一个好处ll是它会从当前方法的开头一直打印出来(而连续的ls会在断点下面显示更多的行).

  • 补充说明:您还可以输入`ll`一次获得更多行。 (4认同)

Gar*_*ett 18

您可以通过以下方式获得更多上下文

ipdb.set_trace(context=21)
Run Code Online (Sandbox Code Playgroud)

(在0.10.0中引入的一个错误打破了这一点,但应尽快修复)

永久上下文大小

要永久设置上下文大小,请执行以下操作来查找安装目录

python -c 'import ipdb; print(ipdb)'
Run Code Online (Sandbox Code Playgroud)

这将显示一个__init__.py文件.打开该文件并找到该行(也可以在IPDB中找到__main__.py:

def set_trace(frame=None, context=3):
Run Code Online (Sandbox Code Playgroud)

将所需的3上下文行更改为多个上下文行.


fas*_*ion 12

好的,我在IPython源代码中找到了这个地方.在我的安装中,它在

.../python2.7/site-packages/ipython-0.10.2-py2.7.egg/IPython/Debugger.py:327:
Run Code Online (Sandbox Code Playgroud)

改变这个:

def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
                      context = 3):
Run Code Online (Sandbox Code Playgroud)

def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
                      context = 11):
Run Code Online (Sandbox Code Playgroud)

太棒了!

对于IPython 4.0.1,在debugger.py中添加以下内容:

class Pdb(OldPdb):
  """Modified Pdb class, does not load readline."""

  def __init__(self,color_scheme='NoColor',completekey=None,
               stdin=None, stdout=None, context=None):
      context=20
Run Code Online (Sandbox Code Playgroud)

  • 用裸手编辑依赖包的大小不是你通常想要配置的东西.. (10认同)
  • 我在Ubuntu 12.04上找到了另一个文件 - /usr/lib/python2.7/dist-packages/IPython/core/debugger.py (2认同)

Bła*_*lik 7

您可以输入以下行~/.ipdb以使 ipdb 自动设置:

context = 10
Run Code Online (Sandbox Code Playgroud)

如果您想根据 shell 配置进行持久设置,也可以使用IPDB_CONTEXT_SIZE变量。将以下内容添加到您的~/.bashrc//~/.zshrc等中:

export IPDB_CONTEXT_SIZE=10
Run Code Online (Sandbox Code Playgroud)

感谢N1ngu指出了这一点。

但请记住,这是在ipdb其本身中实现的,而不是在 中实现的IPython,因此虽然它在与 一起使用时可以工作ipdb.set_trace(),但它不适用于%debug魔法。

从 IPython 7.21 开始,您还可以使用contextipdb 中的命令来更改显示的回溯行数:

context = 10
Run Code Online (Sandbox Code Playgroud)

使用上下文命令后 IPDB 的屏幕截图

除此之外,还有旧的context=参数set_trace(),这使得可以在运行调试器时设置它:

export IPDB_CONTEXT_SIZE=10
Run Code Online (Sandbox Code Playgroud)