これはPythonのフックの制限ですか、それともpdbが選択しないものですか?
フックには制限があるようです。
私はクイック検査がpdb.pyでset_trace
を見つけ
と呼ばれ、(
/usr/lib/python2.7/bdb.py
にprint文を入れて)ものではありませんでしたされていたかを確認するテストをしました:
bdb.py
でset_traceを呼び出し
def set_trace():
Pdb().set_trace(sys._getframe().f_back)
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)
これは、trace_dispatchへのコールバック、also in bdb.pyを設定します。 sys.settraceコード自体はthreading.pyで、おそらくです:
def settrace(func):
global _trace_hook
_trace_hook = func
GitHubの検索が_trace_hook
のためにこれ以上の言及を見つけていないので、おそらくそれは、どこかCコードで魔法のように拾っています。
test()が呼び出されると、sys.settrace()呼び出しが行われたことが判明しますが、trace_dispatch()の呼び出しは行われません。