4 Stimmen

Python (pdb) - Auszuführende Befehle in eine Warteschlange stellen

Ich implementiere ein "Haltepunkt"-System für die Verwendung in meiner Python-Entwicklung, die es mir ermöglichen, eine Funktion, die im Wesentlichen, ruft pdb.set_trace() aufrufen;

Einige der Funktionen, die ich gerne implementieren würde, erfordern die Steuerung von pdb aus dem Code während Ich befinde mich in einem set_trace-Kontext.

Beispiel:

disableList = []
def breakpoint(name=None):
    def d():
        disableList.append(name)
        #****
        #issue 'run' command to pdb so user
        #does not have to type 'c'
        #****

    if name in disableList:
        return

    print "Use d() to disable breakpoint, 'c' to continue"
    pdb.set_trace();

Wie implementiere ich im obigen Beispiel die Kommentare, die durch das Symbol #**** ?

In anderen Teilen dieses Systems möchte ich einen "Aufwärts"-Befehl oder zwei aufeinanderfolgende "Aufwärts"-Befehle erteilen, ohne die pdb-Sitzung zu verlassen (der Benutzer landet also an einer pdb-Eingabeaufforderung, aber zwei Ebenen höher auf dem Aufrufstapel).

6voto

Alex Morega Punkte 3944

Sie können Methoden auf niedrigerer Ebene aufrufen, um mehr Kontrolle über den Debugger zu erhalten:

def debug():
    import pdb
    import sys

    # set up the debugger
    debugger = pdb.Pdb()
    debugger.reset()

    # your custom stuff here
    debugger.do_where(None) # run the "where" command

    # invoke the interactive debugging prompt
    users_frame = sys._getframe().f_back # frame where the user invoked `debug()`
    debugger.interaction(users_frame, None)

if __name__ == '__main__':
    print 1
    debug()
    print 2

Sie finden die Dokumentation für das pdb Modul hier: http://docs.python.org/library/pdb und für die bdb Debugging-Schnittstelle der unteren Ebene hier: http://docs.python.org/library/bdb . Sie können auch einen Blick auf den Quellcode werfen.

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