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

53 投票
8 回答
19350 浏览
提问于 2025-04-16 18:58

默认情况下,在使用IPython调试时,ipdb会在代码中显示当前行的上一行和下一行。

有没有简单的方法可以让显示的区域变大一点?我觉得这个应该可以设置,但我找不到相关的选项。

8 个回答

24

编辑:这个回答有点过时,建议查看@Błażej Michalik的回答。


你可以通过以下方式获取更多信息:

ipdb.set_trace(context=21)

永久设置上下文大小

要永久设置上下文的大小,首先需要找到安装目录,可以通过以下命令:

python -c 'import ipdb; print(ipdb)'

这会显示一个 __init__.py 文件。打开这个文件,找到那一行(在IPDB的 __main__.py 文件中也可能找到):

def set_trace(frame=None, context=3):

3 改成你想要的上下文行数。

49

你可以在ipdb里输入l,这样就能看到当前上下文的更多行。

而且你可以一直按l,它会继续显示文件中的更多行。

如果你想查看当前行周围的更多行,可以先输入l来获取当前行。然后输入l curr_line - 10, curr_line + 10。比如说我在第50行,想看看周围的20行,我就可以输入:l 40,60来查看更多内容。

正如@jrieke在评论中提到的,你也可以按ll来获取更大一块的上下文。使用ll的一个好处是,它会从当前方法的开始位置打印所有内容(而连续按l只会显示你断点下方的更多行)。

13

简单的方法 - 2022

  • 找出你是从哪里加载ipdb的
  • import ipdb
  • print(ipdb.__file__)
  • 打开那个文件夹里的__main__.py
  • 搜索except (configparser.NoSectionError, configparser.NoOptionError):
  • 在它下面有个3,把它改成你想要的值

为什么这个方法比正式的方法更好:

  • 我不需要学习新的配置语言
  • 我不需要创建新的配置文件
  • 我不需要调试为什么我的配置文件没有被识别
  • 你不会被文件的作用域/权限/可见性搞糊涂,因为你知道加载的是哪个ipdb模块(也就是说,它也适用于虚拟环境)
  • 我不需要和上游沟通,试图说服他们采用这个默认设置。

撰写回答