42

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

“继续上一个listing”功能确实不错,但是怎么关掉呢?

4

5 回答 5

29

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

alias ll u;;d;;l

然后,每当您键入时ll,pdb 都会从当前位置列出。它通过向上堆栈然后向下堆栈来工作,这会将'l'重置为从当前位置显示。(如果您位于堆栈跟踪的顶部,这将不起作用。)

于 2012-08-07T14:18:25.863 回答
20

尝试这个。

(pdb) l .

也许你总是可以输入点。

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

于 2018-09-17T08:05:35.127 回答
6

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

import epdb
epdb.serve()
于 2010-02-25T17:15:46.173 回答
5

我认为没有办法将其关闭。让我很恼火的是,一旦我查看 pdb 源代码以查看是否存在未记录的语法,但我没有找到任何语法。

确实需要一种语法来表示“列出当前执行指针附近的行”。

于 2009-08-23T15:11:03.157 回答
4

你可以为你想要的行为修改它。例如,这是一个完整的脚本,它向 pdb 添加了“reset_list”或“rl”命令:

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
于 2009-08-24T19:31:39.543 回答