def should_block_on_frame(self, frame):
if not should_debug_code(frame.f_code):
return False
# It is still possible that we're somewhere in standard library code, but that code was invoked by our
# internal debugger machinery (e.g. socket.sendall or text encoding while tee'ing print output to VS).
# We don't want to block on any of that, either, so walk the stack and see if we hit debugger frames
# at some point below the non-debugger ones.
while frame is not None:
# There is usually going to be a debugger frame at the very bottom of the stack - the one that
# invoked user code on this thread when starting debugging. If we reached that, then everything
# above is user code, so we know that we do want to block here.
if frame.f_code in DEBUG_ENTRYPOINTS:
break
# Otherwise, check if it's some other debugger code.
filename = path.normcase(frame.f_code.co_filename)
is_debugger_frame = False
for debugger_file in DONT_DEBUG:
if is_same_py_file(filename, debugger_file):
# If it is, then the frames above it on the stack that we have just walked through
# were for debugger internal purposes, and we do not want to block here.
return False
frame = frame.f_back
return True
visualstudio_py_debugger.py 文件源码
python
阅读 25
收藏 0
点赞 0
评论 0
评论列表
文章目录