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

Jor*_*gas 32 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 arguments, list the given range;
  if the second argument is less than the first, it is a count.
Run Code Online (Sandbox Code Playgroud)

"继续上一个上市"功能非常好,但是你怎么把它关掉?

Gho*_*r21 25

迟到但希望仍然有用.在pdb中,创建以下别名(您可以将其添加到.pdbrc文件中,以便它始终可用):

alias ll u;;d;;l
Run Code Online (Sandbox Code Playgroud)

然后每当您键入时ll,pdb将从当前位置列出.它的工作方式是向上移动堆栈然后向下移动堆栈,重置"l"以显示当前位置.(如果您位于堆栈跟踪的顶部,则无效.)


plh*_*lhn 12

尝试这个。

(pdb) l .

也许你总是可以输入点。

附: 您可以考虑使用pudb。这是一个很好的 pdb 用户界面,就像gdbtui对 gdb 一样。

  • 我认为这应该有更多的赞成票……不错的答案。我已经为此烦恼了很长时间,并且总是输入随机行号,直到我弄清楚我在哪里。谢谢! (2认同)

小智 6

如果你使用epdb而不是pdb,你可以使用"l"继续前进,就像在pdb中一样,然后使用"l".返回当前行号,"l-"返回文件.您也可以使用#直到给定的行继续.Epdb也提供了许多其他细节.需要远程调试吗?尝试serve()代替set_trace()然后telnet(端口8080是默认端口).

import epdb
epdb.serve()
Run Code Online (Sandbox Code Playgroud)


Ned*_*der 5

我认为没有办法将其关掉.这让我感到非常恼火,一旦我查看pdb源代码,看看是否有未记录的语法,但我没有找到任何语法.

确实需要一种语法,即"列出当前执行指针附近的行".


Mik*_*ers 4

你可以猴子修补它以获得你想要的行为。例如,下面是一个完整的脚本,它将“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
Run Code Online (Sandbox Code Playgroud)

可以想象,我们可以对标准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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,我想这就是目前要走的路。也许是针对 python 本身的补丁提案? (2认同)