45 Stimmen

Wie setzt man in pdb die Anzahl der Befehlszeilen von list (l) zurück?

Von 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.

Die Funktion "Fortsetzung der vorherigen Auflistung" ist wirklich nett, aber wie schaltet man sie aus?

31voto

Ghopper21 Punkte 9725

Spät, aber hoffentlich trotzdem hilfreich. Erstellen Sie in pdb den folgenden Alias (den Sie zu Ihrer .pdbrc-Datei hinzufügen können, damit er immer verfügbar ist):

alias ll u;;d;;l

Wenn Sie dann Folgendes eingeben ll eingeben, listet pdb ab der aktuellen Position auf. Es funktioniert, indem es den Stapel nach oben und dann nach unten durchläuft, was 'l' zurücksetzt, um von der aktuellen Position aus anzuzeigen. (Dies funktioniert nicht, wenn Sie sich am Anfang des Stack Trace befinden).

26voto

plhn Punkte 4557

Versuchen Sie dies.

(pdb) l .

Vielleicht können Sie den Punkt immer tippen.

ps. Sie können Folgendes verwenden pudb . Dies ist eine schöne UI zu pdb was gdbtui ist für gdb.

6voto

Joseph Tate Punkte 94

Wenn Sie epdb anstelle von pdb können Sie "l" verwenden, um wie in pdb vorwärts zu gehen, aber dann geht "l." zurück zur aktuellen Zeilennummer und "l-" geht rückwärts durch die Datei. Sie können auch until # verwenden, um bis zu einer bestimmten Zeile fortzufahren. Epdb bietet noch eine ganze Reihe anderer Annehmlichkeiten. Müssen Sie aus der Ferne debuggen? Versuchen Sie serve() anstelle von set_trace() und dann Telnet ein (Port 8080 ist der Standardport).

import epdb
epdb.serve()

5voto

Ned Batchelder Punkte 342778

Ich glaube nicht, dass es eine Möglichkeit gibt, diese Funktion auszuschalten. Es hat mich so geärgert, dass ich einmal im pdb-Quelltext nachgesehen habe, ob es eine undokumentierte Syntax gibt, aber ich habe keine gefunden.

Es muss wirklich eine Syntax geben, die besagt: "Listen Sie die Zeilen in der Nähe des aktuellen Ausführungszeigers auf".

4voto

Mike Boers Punkte 6555

Sie könnten Affenpflaster für das von Ihnen gewünschte Verhalten. Hier ist zum Beispiel ein vollständiges Skript, das pdb einen "reset_list" oder "rl" Befehl hinzufügt:

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

Es ist denkbar, dass man den Standard mit einem Patch versehen kann list Befehl, um die Leinenhistorie nicht zu behalten.

bearbeiten: Und hier ist ein solches Pflaster:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X