mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
We can't use co_extra for suspend all threads and pausing program, add a flag (PY-22725 )
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
try:
|
||||
from _pydevd_frame_eval.pydevd_frame_evaluator import frame_eval_func, stop_frame_eval
|
||||
from _pydevd_frame_eval.pydevd_frame_evaluator import frame_eval_func, stop_frame_eval, set_use_code_extra
|
||||
except ImportError:
|
||||
try:
|
||||
import struct
|
||||
@@ -25,6 +25,6 @@ except ImportError:
|
||||
check_name = '_pydevd_frame_eval.%s' % (mod_name,)
|
||||
mod = __import__(check_name)
|
||||
mod = getattr(mod, mod_name)
|
||||
frame_eval_func, stop_frame_eval = mod.frame_eval_func, mod.stop_frame_eval
|
||||
frame_eval_func, stop_frame_eval, set_use_code_extra = mod.frame_eval_func, mod.stop_frame_eval, mod.set_use_code_extra
|
||||
except ImportError:
|
||||
raise
|
||||
@@ -7,6 +7,7 @@ if sys.version_info[0] == 3 and sys.version_info[1] == 6:
|
||||
|
||||
frame_eval_func = None
|
||||
stop_frame_eval = None
|
||||
set_use_code_extra = None
|
||||
|
||||
USE_FRAME_EVAL = os.environ.get('PYDEVD_USE_FRAME_EVAL', None)
|
||||
|
||||
@@ -16,7 +17,7 @@ if USE_FRAME_EVAL == 'NO':
|
||||
else:
|
||||
if IS_PY36:
|
||||
try:
|
||||
from _pydevd_frame_eval.pydevd_frame_eval_cython_wrapper import frame_eval_func, stop_frame_eval
|
||||
from _pydevd_frame_eval.pydevd_frame_eval_cython_wrapper import frame_eval_func, stop_frame_eval, set_use_code_extra
|
||||
except ImportError:
|
||||
from _pydev_bundle.pydev_monkey import log_error_once
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -15,19 +15,35 @@ AVOID_RECURSION = [
|
||||
]
|
||||
|
||||
get_file_type = DONT_TRACE.get
|
||||
NO_BREAKS_IN_FRAME = 1
|
||||
|
||||
|
||||
class UseCodeExtraHolder:
|
||||
use_code_extra = True
|
||||
|
||||
|
||||
def is_use_code_extra():
|
||||
return UseCodeExtraHolder.use_code_extra
|
||||
|
||||
|
||||
def set_use_code_extra(new_value):
|
||||
UseCodeExtraHolder.use_code_extra = new_value
|
||||
|
||||
|
||||
cdef PyObject* get_bytecode_while_frame_eval(PyFrameObject *frame_obj, int exc):
|
||||
frame = <object> frame_obj
|
||||
cdef str filepath = frame.f_code.co_filename
|
||||
cdef bint skip_file = exc
|
||||
cdef void* extra = PyMem_Malloc(sizeof(int))
|
||||
cdef void* extra = NULL
|
||||
cdef int* extra_value = NULL
|
||||
|
||||
_PyCode_GetExtra(<PyObject*> frame.f_code, 0, &extra)
|
||||
if extra is not NULL:
|
||||
extra_value = <int*> extra
|
||||
if extra_value[0] == 1:
|
||||
return _PyEval_EvalFrameDefault(frame_obj, exc)
|
||||
if is_use_code_extra():
|
||||
extra = PyMem_Malloc(sizeof(int))
|
||||
_PyCode_GetExtra(<PyObject*> frame.f_code, 0, &extra)
|
||||
if extra is not NULL:
|
||||
extra_value = <int*> extra
|
||||
if extra_value[0] == NO_BREAKS_IN_FRAME:
|
||||
return _PyEval_EvalFrameDefault(frame_obj, exc)
|
||||
|
||||
for file in AVOID_RECURSION:
|
||||
# we can't call any other function without this check, because we can get stack overflow
|
||||
@@ -100,7 +116,7 @@ cdef PyObject* get_bytecode_while_frame_eval(PyFrameObject *frame_obj, int exc):
|
||||
|
||||
if not was_break:
|
||||
extra_value = <int*> PyMem_Malloc(sizeof(int))
|
||||
extra_value[0] = 1
|
||||
extra_value[0] = NO_BREAKS_IN_FRAME
|
||||
_PyCode_SetExtra(<PyObject*> code_object, 0, extra_value)
|
||||
|
||||
additional_info.is_tracing = False
|
||||
|
||||
@@ -36,7 +36,7 @@ from _pydevd_bundle.pydevd_custom_frames import CustomFramesContainer, custom_fr
|
||||
from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame
|
||||
from _pydevd_bundle.pydevd_kill_all_pydevd_threads import kill_all_pydev_threads
|
||||
from _pydevd_bundle.pydevd_trace_dispatch import trace_dispatch as _trace_dispatch
|
||||
from _pydevd_frame_eval.pydevd_frame_eval_main import frame_eval_func, stop_frame_eval
|
||||
from _pydevd_frame_eval.pydevd_frame_eval_main import frame_eval_func, stop_frame_eval, set_use_code_extra
|
||||
from _pydevd_bundle.pydevd_utils import save_main_module
|
||||
from pydevd_concurrency_analyser.pydevd_concurrency_logger import ThreadingLogger, AsyncioLogger, send_message, cur_time
|
||||
from pydevd_concurrency_analyser.pydevd_thread_wrappers import wrap_threads
|
||||
@@ -674,6 +674,7 @@ class PyDB:
|
||||
thread_id = get_thread_id(thread)
|
||||
int_cmd = InternalSetTracingThread(thread_id)
|
||||
self.post_internal_command(int_cmd, thread_id)
|
||||
set_use_code_extra(False)
|
||||
|
||||
|
||||
def _send_breakpoint_condition_exception(self, thread):
|
||||
|
||||
Reference in New Issue
Block a user