2016-03-28 2 views
3

Nach einer tutorial on Python's debugger habe ich pdb.set_trace() verwendet, um den Beispielcode zu unterbrechen. Es funktionierte, aber was ist, wenn Sie an der interaktiven Eingabeaufforderung sind und einen anderen verschachtelten Breakpoint möchten?Sind in pdb verschachtelte Breakpoints möglich - wenn nicht, was verhindert sie?

(Pdb) def test(): pdb.set_trace(); print "don't print this yet" 
(Pdb) test() 
don't print this yet 

Es hörte nicht auf. Ist der Debugger grundsätzlich "One Deep"? z.B. Ist das eine Einschränkung von Pythons Hooks oder etwas, das pdb nicht tut?

Antwort

0

ist dies eine Einschränkung der Python-Hooks, oder nur etwas, was pdb nicht tun?

Es scheint eine Beschränkung der Haken zu sein.

habe ich einen Test, um zu sehen, was geklingelt und was nicht

Schnellprüfung findet set_trace in pdb.py (print-Anweisungen in /usr/lib/python2.7/bdb.py setzen):

def set_trace(): 
    Pdb().set_trace(sys._getframe().f_back) 

Das set_trace ruft in bdb.py

Dadurch wird ein Rückruf zu trace_dispatch, also in bdb.py, eingerichtet. Der sys.settrace Code selbst ist vielleicht in threading.py:

def settrace(func): 
    global _trace_hook 
    _trace_hook = func 

GitHub Suche findet keine weiteren Artikeln für _trace_hook, so vermutlich irgendwo auf magische Weise in C-Code das ist abgeholt.

Wenn test() aufgerufen wird, stellt sich heraus, dass der Aufruf sys.settrace() ausgeführt wird ... aber der Aufruf von trace_dispatch() findet nicht statt.

Verwandte Themen