Python 在pdb中,如何重置list(l)命令行计数?

Python 在pdb中,如何重置list(l)命令行计数?,python,pdb,Python,Pdb,来自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 arg

来自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.

“继续上一个列表”功能非常好,但是如何关闭它呢?

我认为没有办法关闭它。这让我非常恼火,有一次我去查看pdb源代码,看看是否有未记录的语法,但我没有找到任何语法

确实需要有一种语法,意思是“列出当前执行指针附近的行。”

您可以根据自己的行为来选择它。例如,下面是一个完整的脚本,它将“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历史记录

编辑:下面是这样一个补丁:

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
如果您使用而不是pdb,您可以使用“l”前进,就像在pdb中一样,但是“l”返回到当前行号,“l-”在文件中后退。您还可以使用until#继续,直到指定行。Epdb还提供了一系列其他细节。需要远程调试吗?尝试
service()
而不是
set_trace()
,然后telnet进入(端口8080是默认端口)


虽然晚了,但希望仍然有帮助。在pdb中,使用以下别名(您可以将其添加到.pdbrc文件中,使其始终可用):

然后,无论何时键入
ll
,pdb都将从当前位置列出。它的工作原理是先上堆栈,然后下堆栈,这将重置“l”以从当前位置显示。(如果您位于堆栈跟踪的顶部,则此操作无效。)

尝试此操作

(pdb)l.

也许你可以一直打圆点

附言。
你可以考虑使用。这对pdb来说是一个很好的UI,对gdb来说也是如此。

这是一个既好又可怕的消息。这很好,因为现在我知道这不是一个愚蠢的问题,很可怕,因为我真的很喜欢这样的问题。因为我们将进入功能请求类别,所以我认为最好是进行反向操作。让我们称之为“rlist”,它将是列表中的反向寻呼机。所以做(Pdb)l(Pdb)r会让你达到同样的目的。谢谢你,我想这是目前的做法。也许是python本身的一个补丁方案?对于那些来到这里想知道如何回到原始起始集的人来说,一个解决方法是
w
获取行号,而不是例如
l42
查看42行周围的11行。另一个是:向上然后向下如何在
pdb
配置中添加它?现在,每当它在
pdb上中断时,我都必须运行它。set_trace()
。将别名行放入CWD或$HOME中的文件
。pdbrc
;在Windows上,您可能还需要在envs中手动设置HOME=%HOMEPATH%,因为pdb没有正确使用os.path.expanduser(“~”)。最佳答案:)谢谢。我意识到,
ll
实际上是一个别名,它会将您带到文件末尾,因此我将其命名为
rl
,它代表“重置列表”。希望这有帮助!这应该有更多的投票,我认为…很好的答案。我已经为此烦恼了很长一段时间了,我总是随机输入行号,直到我知道我在哪里。谢谢
import epdb
epdb.serve()
alias ll u;;d;;l