1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
import os
from _pydev_bundle import pydev_log
from _pydevd_bundle.pydevd_trace_dispatch import USING_CYTHON
from _pydevd_bundle.pydevd_constants import (
USE_CYTHON_FLAG,
ENV_FALSE_LOWER_VALUES,
ENV_TRUE_LOWER_VALUES,
IS_PY36_OR_GREATER,
IS_PY38_OR_GREATER,
SUPPORT_GEVENT,
IS_PYTHON_STACKLESS,
PYDEVD_USE_FRAME_EVAL,
PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING,
IS_PY311_OR_GREATER,
)
frame_eval_func = None
stop_frame_eval = None
dummy_trace_dispatch = None
clear_thread_local_info = None
# "NO" means we should not use frame evaluation, 'YES' we should use it (and fail if not there) and unspecified uses if possible.
if (
PYDEVD_USE_FRAME_EVAL in ENV_FALSE_LOWER_VALUES
or USE_CYTHON_FLAG in ENV_FALSE_LOWER_VALUES
or not USING_CYTHON
or
# Frame eval mode does not work with ipython compatible debugging (this happens because the
# way that frame eval works is run untraced and set tracing only for the frames with
# breakpoints, but ipython compatible debugging creates separate frames for what's logically
# the same frame).
PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING
):
USING_FRAME_EVAL = False
elif SUPPORT_GEVENT or (IS_PYTHON_STACKLESS and not IS_PY38_OR_GREATER):
USING_FRAME_EVAL = False
# i.e gevent and frame eval mode don't get along very well.
# https://github.com/microsoft/debugpy/issues/189
# Same problem with Stackless.
# https://github.com/stackless-dev/stackless/issues/240
elif PYDEVD_USE_FRAME_EVAL in ENV_TRUE_LOWER_VALUES and not IS_PY311_OR_GREATER:
# Python 3.11 onwards doesn't have frame eval mode implemented
# Fail if unable to use
from _pydevd_frame_eval.pydevd_frame_eval_cython_wrapper import (
frame_eval_func,
stop_frame_eval,
dummy_trace_dispatch,
clear_thread_local_info,
)
USING_FRAME_EVAL = True
else:
USING_FRAME_EVAL = False
# Try to use if possible
if IS_PY36_OR_GREATER and not IS_PY311_OR_GREATER:
# Python 3.11 onwards doesn't have frame eval mode implemented
try:
from _pydevd_frame_eval.pydevd_frame_eval_cython_wrapper import (
frame_eval_func,
stop_frame_eval,
dummy_trace_dispatch,
clear_thread_local_info,
)
USING_FRAME_EVAL = True
except ImportError:
pydev_log.show_compile_cython_command_line()
|