est-ce une limitation des crochets de Python, ou juste quelque chose que pdb ne choisit pas de faire?
Il semble s'agir d'une limitation des crochets.
J'ai fait un test pour voir ce qui a été appelé et ce qui n'a pas été (mettre des déclarations d'impression à /usr/lib/python2.7/bdb.py
)
inspection rapide trouve set_trace
dans pdb.py:
def set_trace():
Pdb().set_trace(sys._getframe().f_back)
qui appelle set_trace dans bdb.py
def set_trace(self, frame=None):
"""Start debugging from `frame`.
If frame is not specified, debugging starts from caller's frame.
"""
if frame is None:
frame = sys._getframe().f_back
self.reset()
while frame:
frame.f_trace = self.trace_dispatch
self.botframe = frame
frame = frame.f_back
self.set_step()
sys.settrace(self.trace_dispatch)
Cela configure un rappel à trace_dispatch, also in bdb.py. Le code sys.settrace lui-même est peut-être threading.py:
def settrace(func):
global _trace_hook
_trace_hook = func
recherche GitHub ne trouve pas plus de références pour _trace_hook
, on peut donc supposer que est ramassé par magie dans le code C quelque part.
Lorsque test() est appelé, il s'avère que l'appel de sys.settrace() est effectué ... mais l'appel à trace_dispatch() ne se produit pas.