По умолчанию во время отладки в IPython ipdb отображается одна строка выше и одна строка ниже текущей позиции в коде.
Есть ли простой способ сделать область показанной немного больше? Я думаю, что он будет настраиваться, но не смог его найти.
По умолчанию во время отладки в IPython ipdb отображается одна строка выше и одна строка ниже текущей позиции в коде.
Есть ли простой способ сделать область показанной немного больше? Я думаю, что он будет настраиваться, но не смог его найти.
ОК, я нашел место в исходном коде IPython для этого. В моей установке он на
.../python2.7/site-packages/ipython-0.10.2-py2.7.egg/IPython/Debugger.py:327:
Измените это:
def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
context = 3):
к
def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
context = 11):
Это потрясающе!
Для 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
Вы можете ввести l
в ipdb, чтобы показать еще несколько строк текущего контекста
и вы можете продолжить нажатие l
, и он продолжает показывать больше строк из файла
Если вы хотите показать больше строк контекста вокруг текущей строки, вы можете ввести l
, чтобы получить текущую строку. А затем введите l curr_line - 10, curr_line + 10
. Скажем, я был на линии 50, и мне хотелось увидеть 20 линий. Я бы набрал: l 40,60
, чтобы увидеть больше.
Как отмечено @jrieke в комментарии, вы также можете нажать ll
, чтобы получить больший фрагмент контекста. Одна приятная вещь о ll
заключается в том, что она будет полностью отпечатана с начала текущего метода (тогда как последовательный l
показывает дальнейшие строки ниже точки останова).
Вы можете получить больше контекста, выполнив следующие действия:
ipdb.set_trace(context=21)
(там ошибка, введенная в 0.10.0, которая нарушает это, но она должна быть исправлена в ближайшее время)
Чтобы окончательно установить размер контекста, найдите каталог установки, выполнив
python -c 'import ipdb; print(ipdb)'
который покажет вам файл __init__.py
. Откройте этот файл и найдите строку (которая также может быть найдена в IPDB __main__.py
:
def set_trace(frame=None, context=3):
измените 3
на сколько угодно строк контекста.
В качестве быстрого дополнения к fooobar.com/info/199025/... это тот вкладыш, который вы обычно хотите добавить к коду, который хотите отлаживать:
__import__('ipdb').set_trace(context=21)
Скорее всего, вы захотите добавить ярлык для этого из вашего редактора, например для Vim snipmat:
snippet ipd
__import__('ipdb').set_trace(context=21)
поэтому я могу набрать только ipd<tab>
и он расширяется до точки останова. Тогда удалить его легко с помощью dd
поскольку все содержится в одной строке.