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

В pdb как вы reset подсчитываете количество строк списка (l)?

От 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.

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

4b9b3361

Ответ 1

Вы можете патч обезьяны для вашего поведения. Например, вот полный script, который добавляет команду "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, чтобы не сохранить историю lineno.

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

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

alias ll u;;d;;l

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

Ответ 3

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

import epdb
epdb.serve()

Ответ 4

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

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