默认情况下,在IPython中调试期间,ipdb显示代码中当前位置的上下一行。有没有一个简单的方法可以让显示的区域更大一些?我想这是可以配置的,但是我没有找到。
kmb7vmvb1#
您可以在ipdb中输入l以显示当前上下文的更多行你可以继续点击l,它会继续显示文件中的更多行如果你想在当前行周围显示更多的上下文行,你可以输入l来获得当前行。然后输入l curr_line - 10, curr_line + 10。假设我在第50行,我想看到周围的20行。我会输入:l 40,60来查看更多。正如@jrieke在评论中所指出的,你也可以点击ll来获得更大的上下文块。ll的一个好处是它会从当前方法的开始一直打印(而连续的l s会显示断点下面的更多行)。
l
l curr_line - 10, curr_line + 10
l 40,60
ll
uttx8gqw2#
编辑:这个答案有点过时了,请看@ Baej Michalik的答案。您可以通过以下操作获得更多上下文:
ipdb.set_trace(context=21)
字符串
要永久设置上下文大小,请执行以下操作查找安装目录
python -c 'import ipdb; print(ipdb)'
型这将显示一个__init__.py文件。打开该文件并找到该行(也可以在IPDB的__main__.py:
__init__.py
__main__.py
def set_trace(frame=None, context=3):
型将3更改为您想要的任何上下文行。
3
ux6nzvsh3#
简单的方法来做到这一点- 2022年
print(ipdb.__file__)
except (configparser.NoSectionError, configparser.NoOptionError):
为什么这比正确的方法更好:
umuewwlo4#
您可以在~/.ipdb中放置以下行,以使ipdb自动设置它:
~/.ipdb
context = 10
字符串如果你想拥有一个基于你的shell配置的持久设置,你也可以使用IPDB_CONTEXT_SIZE变量。将以下内容添加到你的~/.bashrc/~/.zshrc/etc中:
IPDB_CONTEXT_SIZE
~/.bashrc
~/.zshrc
export IPDB_CONTEXT_SIZE=10
型
但是请记住,这是在ipdb本身中实现的,而不是在IPython中实现的,所以虽然它在与ipdb.set_trace()一起使用时可以工作,但它不适用于%debug魔术。从IPython 7.21开始,您还可以在ipdb中使用context命令来更改显示的回溯行数:
ipdb
IPython
ipdb.set_trace()
%debug
context
import ipdb; ipdb.set_trace() ... ipdb> context 10 ipdb> bt
型x1c 0d1x的数据除此之外,set_trace()中还有旧的context=参数,这使得在运行调试器时可以设置它:
set_trace()
context=
import ipdb; ipdb.set_trace(context=10) # or, if you've set PYTHONBREAKPOINT=ipdb.set_trace in your environment breakpoint(context=10)
k3bvogb15#
编辑:已实现:https://stackoverflow.com/a/66474153/895245作为对this other answer的快速补充,这是您通常希望添加到要调试的代码中的一个liner:
__import__('ipdb').set_trace(context=21)
字符串你可能想从你的编辑器中添加一个快捷方式,例如对于Vim snipmat,我有:
snippet ipd __import__('ipdb').set_trace(context=21)
型所以我可以只输入ipd<tab>,它就扩展到断点。然后用dd删除它很容易,因为所有内容都包含在一行中。请求ipdb增加默认context大小的功能:https://github.com/gotcha/ipdb/issues/147
ipd<tab>
dd
cnjp1d6j6#
这里有一个补丁,可以永久设置程序的上下文:(适用于set_trace和post_mortem)
def ipdb_patch(context = 11): import ipdb ipdbmain = ipdb.__main__ def _init_pdb(context=context, commands=[]): try : p = ipdbmain.debugger_cls(context=context) except TypeError : p = ipdbmain.debugger_cls() p.rcLines.extend(commands) return p def set_trace(frame=None, context=context): ipdbmain.wrap_sys_excepthook() if frame is None : frame = ipdbmain.sys._getframe().f_back p = ipdbmain._init_pdb(context).set_trace(frame) if p and hasattr(p, 'shell') : p.shell.restore_sys_module_state() ipdbmain._init_pdb = _init_pdb ipdb.set_trace = set_trace return ipdb ipdb = ipdb_patch()
字符串要添加breakpoint()功能,只需添加:
import sys sys.breakpointhook = ipdb.set_trace
型因此,以下所有命令都具有正确的上下文大小:
ipdb.set_trace() breakpoint() ipdb.post_mortem() ipdb.pm() %debug
型但它不适用于此:
In [1]: %run -d file.py
型如果你知道如何调整,请随时发表评论
9lowa7mx7#
如果你想停止运行系统中的执行,就像其他人说的,用途:
ipdb.set_trace(context=number_of_lines)
字符串对于运行一些函数或对象的方法,修改上下文行有点棘手。我发现的唯一方法是:
ipdb.__main__._init_pdb(context=number_of_lines).runcall(callable, *args, **kwargs)
型万一它能帮上什么忙。
huwehgph8#
按照@erock618的方式,在最近的ipdb版本中,您可以使用:用途:
debugger_cls = ipdb.__main__._get_debugger_cls()
8条答案
按热度按时间kmb7vmvb1#
您可以在ipdb中输入
l
以显示当前上下文的更多行你可以继续点击
l
,它会继续显示文件中的更多行如果你想在当前行周围显示更多的上下文行,你可以输入
l
来获得当前行。然后输入l curr_line - 10, curr_line + 10
。假设我在第50行,我想看到周围的20行。我会输入:l 40,60
来查看更多。正如@jrieke在评论中所指出的,你也可以点击
ll
来获得更大的上下文块。ll
的一个好处是它会从当前方法的开始一直打印(而连续的l
s会显示断点下面的更多行)。uttx8gqw2#
编辑:这个答案有点过时了,请看@ Baej Michalik的答案。
您可以通过以下操作获得更多上下文:
字符串
永久上下文大小
要永久设置上下文大小,请执行以下操作查找安装目录
型
这将显示一个
__init__.py
文件。打开该文件并找到该行(也可以在IPDB的__main__.py
:型
将
3
更改为您想要的任何上下文行。ux6nzvsh3#
简单的方法来做到这一点- 2022年
print(ipdb.__file__)
个__main__.py
except (configparser.NoSectionError, configparser.NoOptionError):
为什么这比正确的方法更好:
umuewwlo4#
您可以在
~/.ipdb
中放置以下行,以使ipdb自动设置它:字符串
如果你想拥有一个基于你的shell配置的持久设置,你也可以使用
IPDB_CONTEXT_SIZE
变量。将以下内容添加到你的~/.bashrc
/~/.zshrc
/etc中:型
但是请记住,这是在
ipdb
本身中实现的,而不是在IPython
中实现的,所以虽然它在与ipdb.set_trace()
一起使用时可以工作,但它不适用于%debug
魔术。从IPython 7.21开始,您还可以在ipdb中使用
context
命令来更改显示的回溯行数:型
x1c 0d1x的数据
除此之外,
set_trace()
中还有旧的context=
参数,这使得在运行调试器时可以设置它:型
k3bvogb15#
编辑:已实现:https://stackoverflow.com/a/66474153/895245
作为对this other answer的快速补充,这是您通常希望添加到要调试的代码中的一个liner:
字符串
你可能想从你的编辑器中添加一个快捷方式,例如对于Vim snipmat,我有:
型
所以我可以只输入
ipd<tab>
,它就扩展到断点。然后用dd
删除它很容易,因为所有内容都包含在一行中。请求ipdb增加默认
context
大小的功能:https://github.com/gotcha/ipdb/issues/147cnjp1d6j6#
这里有一个补丁,可以永久设置程序的上下文:
(适用于set_trace和post_mortem)
字符串
要添加breakpoint()功能,只需添加:
型
因此,以下所有命令都具有正确的上下文大小:
型
但它不适用于此:
型
如果你知道如何调整,请随时发表评论
9lowa7mx7#
如果你想停止运行系统中的执行,就像其他人说的,用途:
字符串
对于运行一些函数或对象的方法,修改上下文行有点棘手。我发现的唯一方法是:
型
万一它能帮上什么忙。
huwehgph8#
按照@erock618的方式,在最近的ipdb版本中,您可以使用:用途:
字符串