В pdb как сбросить счетчик командной строки list (l)? - PullRequest
32 голосов
/ 23 августа 2009

Из PDB

(Pdb) help l
l(ist) [first [,last]]
  List source code for the current file.
  Without arguments, list 11 lines around the current line
  or continue the previous listing.
  With one argument, list 11 lines starting at that line.
  With two arguments, list the given range;
  if the second argument is less than the first, it is a count.

Функция "продолжить предыдущий листинг" действительно хороша, но как ее отключить?

Ответы [ 5 ]

25 голосов
/ 07 августа 2012

Поздно, но, надеюсь, все еще полезно. В pdb создайте следующий псевдоним (который вы можете добавить в файл .pdbrc, чтобы он всегда был доступен):

alias ll u;;d;;l

Затем, когда вы наберете ll, pdb будет выводить список с текущей позиции. Это работает, поднимаясь вверх по стеку, а затем вниз по стеку, что сбрасывает «l», чтобы показать из текущей позиции. (Это не сработает, если вы находитесь на вершине трассировки стека.)

6 голосов
/ 25 февраля 2010

Если вы используете epdb вместо pdb, вы можете использовать «l» для продвижения вперед, как в pdb, но затем «l» возвращается к текущему номеру строки, а "l-" перемещается назад по файлу. Вы также можете использовать до #, чтобы продолжить до данной строки. Epdb предлагает кучу других тонкостей тоже. Нужно отлаживать удаленно? Попробуйте serve() вместо set_trace(), а затем введите telnet (порт 8080 является портом по умолчанию).

import epdb
epdb.serve()
5 голосов
/ 23 августа 2009

Не думаю, что есть способ отключить его. Меня это раздражало настолько, что однажды я заглянул в исходный код pdb, чтобы посмотреть, есть ли недокументированный синтаксис, но я не нашел его.

Там действительно должен быть синтаксис, который означает: «Перечислите строки рядом с указателем текущего выполнения».

4 голосов
/ 24 августа 2009

Вы можете обезьяна патч это для поведения, которое вы хотите. Например, вот полный скрипт, который добавляет команду «reset_list» или «rl» в pdb:

import pdb

def Pdb_reset_list(self, arg):
    self.lineno = None
    print >>self.stdout, "Reset list position."
pdb.Pdb.do_reset = Pdb_reset_list
pdb.Pdb.do_rl = Pdb_reset_list

a = 1
b = 2

pdb.set_trace()

print a, b

Можно предположить, что обезьяна исправит стандартную команду list, чтобы не сохранять историю белья.

edit: А вот такой патч:

import pdb
Pdb = pdb.Pdb

Pdb._do_list = Pdb.do_list
def pdb_list_wrapper(self, arg):
    if arg.strip().lower() in ('r', 'reset', 'c', 'current'):
        self.lineno = None
        arg = ''
    self._do_list(arg)
Pdb.do_list = Pdb.do_l = pdb_list_wrapper

a = 1
b = 2

pdb.set_trace()

print a, b
2 голосов
/ 17 сентября 2018

Попробуйте это.

(pdb) l .

Может быть, вы всегда можете набрать точку.

...