Подтвердить что ты не робот

Как я могу заставить ipdb отображать больше строк контекста во время отладки?

По умолчанию во время отладки в IPython ipdb отображается одна строка выше и одна строка ниже текущей позиции в коде.

Есть ли простой способ сделать область показанной немного больше? Я думаю, что он будет настраиваться, но не смог его найти.

4b9b3361

Ответ 1

ОК, я нашел место в исходном коде 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

Ответ 2

Вы можете ввести l в ipdb, чтобы показать еще несколько строк текущего контекста

и вы можете продолжить нажатие l, и он продолжает показывать больше строк из файла

Если вы хотите показать больше строк контекста вокруг текущей строки, вы можете ввести l, чтобы получить текущую строку. А затем введите l curr_line - 10, curr_line + 10. Скажем, я был на линии 50, и мне хотелось увидеть 20 линий. Я бы набрал: l 40,60, чтобы увидеть больше.

Как отмечено @jrieke в комментарии, вы также можете нажать ll, чтобы получить больший фрагмент контекста. Одна приятная вещь о ll заключается в том, что она будет полностью отпечатана с начала текущего метода (тогда как последовательный l показывает дальнейшие строки ниже точки останова).

Ответ 3

Вы можете получить больше контекста, выполнив следующие действия:

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 на сколько угодно строк контекста.

Ответ 4

В качестве быстрого дополнения к fooobar.com/info/199025/... это тот вкладыш, который вы обычно хотите добавить к коду, который хотите отлаживать:

__import__('ipdb').set_trace(context=21)

Скорее всего, вы захотите добавить ярлык для этого из вашего редактора, например для Vim snipmat:

snippet ipd
    __import__('ipdb').set_trace(context=21)

поэтому я могу набрать только ipd<tab> и он расширяется до точки останова. Тогда удалить его легко с помощью dd поскольку все содержится в одной строке.