debugpy 1.8.5__zip → 1.8.7__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {debugpy-1.8.5/src/debugpy.egg-info → debugpy-1.8.7}/PKG-INFO +1 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py +19 -21
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py +30 -30
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_execfile.py +3 -1
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +43 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_getopt.py +35 -32
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py +83 -84
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_jy_imports_tipper.py +92 -99
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_log.py +2 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_saved_modules.py +51 -27
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_sys_patch.py +11 -7
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py +6 -5
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py +34 -38
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py +71 -69
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_import_hook.py +1 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py +0 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console.py +14 -16
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console_011.py +81 -93
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py +3 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_localhost.py +9 -8
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py +33 -25
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py +183 -170
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey_qt.py +33 -29
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py +6 -4
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py +19 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_versioncheck.py +3 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles.py +165 -138
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +77 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_nose.py +35 -36
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel.py +22 -23
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel_client.py +37 -57
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_pytest2.py +54 -52
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_unittest.py +28 -37
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_xml_rpc.py +56 -53
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +604 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocol.json +551 -445
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py +25 -29
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +17458 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py +11 -12
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevconsole_code.py +18 -19
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +41 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +328 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py +263 -214
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py +7 -10
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py +187 -92
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils_py311.py +105 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_code_to_source.py +46 -51
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py +239 -176
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py +370 -297
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py +78 -86
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_command_line_handling.py +55 -59
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_concurrency_logger.py +194 -58
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_thread_wrappers.py +2 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py +18 -23
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py +159 -127
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py +10 -12
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +55527 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pxd +15 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pyx +803 -511
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py +18 -7
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py +32 -24
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py +11 -13
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py +16 -16
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py +27 -2
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py +1 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py +4 -5
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py +8 -10
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py +50 -45
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py +462 -407
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py +69 -61
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_gevent_integration.py +14 -16
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py +27 -25
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py +40 -42
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +200 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py +20 -19
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py +199 -108
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py +121 -73
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +208 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py +206 -159
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py +346 -334
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_referrers.py +75 -80
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py +35 -35
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py +116 -124
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py +44 -58
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py +51 -55
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py +4 -2
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_signature.py +24 -24
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py +19 -20
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_stackless.py +45 -49
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py +61 -58
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py +23 -13
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py +29 -31
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py +41 -11
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py +117 -55
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py +11 -14
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py +90 -89
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py +106 -97
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +40 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py +56 -46
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_cython_wrapper.py +5 -5
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +71 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.c +11165 -5326
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_tracing.py +5 -6
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_modify_bytecode.py +53 -56
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py +4 -6
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py +6 -26
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py +7 -21
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py +5 -24
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py +10 -34
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/peephole_opt.py +1 -4
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/__init__.py +2 -6
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_bytecode.py +3 -5
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_cfg.py +11 -31
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_code.py +2 -2
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_concrete.py +14 -41
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_flags.py +2 -4
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_instr.py +7 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_misc.py +6 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_peephole_opt.py +7 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/util_annotation.py +1 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/pydevd_fix_code.py +14 -19
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring.py +1929 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c +43253 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pxd +46 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx +1935 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/pydevd_sys_monitoring.py +16 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_app_engine_debug_startup.py +12 -11
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_coverage.py +30 -32
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhook.py +58 -54
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookglut.py +20 -24
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk.py +8 -7
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk3.py +8 -6
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookpyglet.py +11 -8
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt4.py +21 -18
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt5.py +17 -15
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt6.py +17 -15
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhooktk.py +6 -4
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookwx.py +14 -10
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/matplotlibtools.py +30 -26
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +24 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/qt_for_kernel.py +37 -34
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py +86 -73
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/version.py +7 -7
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_pysrc.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_run_in_console.py +23 -24
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +267 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevconsole.py +55 -47
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd.py +732 -508
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +40 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_check.py +1 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +11 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +75 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/add_code_to_python_process.py +130 -125
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +89 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_script.py +41 -32
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_utils.hpp +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_version.hpp +9 -1
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.exe +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/lldb_prepare.py +10 -9
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll +0 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/__init__.py +103 -119
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/breakpoint.py +457 -516
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/compat.py +33 -15
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/crash.py +336 -281
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/debug.py +101 -131
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/disasm.py +148 -153
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/event.py +310 -302
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/interactive.py +235 -208
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/module.py +185 -218
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/process.py +428 -564
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/registry.py +54 -53
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/search.py +69 -73
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/sql.py +158 -170
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/system.py +143 -213
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/textio.py +302 -333
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/thread.py +220 -239
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/util.py +198 -177
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/__init__.py +11 -11
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/advapi32.py +1191 -713
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_amd64.py +248 -194
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_i386.py +132 -120
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/dbghelp.py +450 -346
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/defines.py +305 -286
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +526 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/kernel32.py +1479 -1097
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +579 -0
- debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +3517 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/psapi.py +54 -31
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shell32.py +170 -149
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shlwapi.py +190 -108
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/user32.py +542 -437
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/version.py +489 -442
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/wtsapi32.py +83 -65
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/window.py +70 -76
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/attach.cpp +17 -9
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/compile_windows.bat +1 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_file_utils.py +141 -120
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py +175 -149
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py +1 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py +5 -5
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py +28 -28
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_pandas_types.py +22 -30
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py +3 -2
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py +130 -108
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/pydevd_line_validation.py +27 -14
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_tracing.py +85 -66
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/setup_pydevd_cython.py +96 -59
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_version.py +3 -3
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/messaging.py +2 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/cli.py +32 -17
- {debugpy-1.8.5 → debugpy-1.8.7/src/debugpy.egg-info}/PKG-INFO +1 -1
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/SOURCES.txt +6 -1
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +0 -41
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +0 -76
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +0 -592
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +0 -19514
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +0 -19
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +0 -153
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +0 -43377
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +0 -204
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +0 -91
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_api.py +0 -62
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +0 -41
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +0 -48
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +0 -23
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_pysrc.py +0 -1
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +0 -237
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +0 -32
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +0 -9
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +0 -74
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +0 -79
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb +0 -0
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +0 -507
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +0 -539
- debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +0 -3435
- {debugpy-1.8.5 → debugpy-1.8.7}/DESCRIPTION.md +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/LICENSE +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/MANIFEST.in +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/README.md +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/pyproject.toml +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/setup.cfg +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/setup.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/ThirdPartyNotices.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/__main__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/_pydevd_packaging.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/_util.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/force_pydevd.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocolCustom.json +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/.gitignore +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.pxd +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.pyx +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.template.pyx +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/release_mem.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/README.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/README +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_sitecustomize/__not_in_default_pythonpath.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/README.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_310.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_311.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_common.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_settrace.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/python.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/ref_utils.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/.gitignore +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/attach.cpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_linux.sh +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_mac.sh +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_manylinux.cmd +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/attach.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/inject_dll.cpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/py_win_helpers.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/run_code_in_memory.hpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/run_code_on_dllmain.cpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/stdafx.cpp +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/stdafx.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/targetver.h +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/README.md +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/__main__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/clients.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/components.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/launchers.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/servers.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/sessions.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/json.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/log.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/singleton.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/sockets.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/stacks.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/timestamp.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/util.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/__main__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/debuggee.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/handlers.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/output.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/winapi.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/public_api.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/__init__.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/api.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/attach_pid_injected.py +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/dependency_links.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/entry_points.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/top_level.txt +0 -0
- {debugpy-1.8.5 → debugpy-1.8.7}/versioneer.py +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
""" pydevd - a debugging daemon
|
|
2
2
|
This is the daemon you launch for python remote debugging.
|
|
3
3
|
|
|
4
4
|
Protocol:
|
|
@@ -61,24 +61,38 @@ each command has a format:
|
|
|
61
61
|
|
|
62
62
|
* JAVA - remote debugger, the java end
|
|
63
63
|
* PYDB - pydevd, the python end
|
|
64
|
-
|
|
64
|
+
"""
|
|
65
65
|
|
|
66
66
|
import linecache
|
|
67
67
|
import os
|
|
68
68
|
|
|
69
69
|
from _pydev_bundle.pydev_imports import _queue
|
|
70
|
-
from _pydev_bundle._pydev_saved_modules import time
|
|
71
|
-
from _pydev_bundle._pydev_saved_modules import threading
|
|
70
|
+
from _pydev_bundle._pydev_saved_modules import time, ThreadingEvent
|
|
72
71
|
from _pydev_bundle._pydev_saved_modules import socket as socket_module
|
|
73
|
-
from _pydevd_bundle.pydevd_constants import (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
from _pydevd_bundle.pydevd_constants import (
|
|
73
|
+
DebugInfoHolder,
|
|
74
|
+
IS_WINDOWS,
|
|
75
|
+
IS_JYTHON,
|
|
76
|
+
IS_WASM,
|
|
77
|
+
IS_PY36_OR_GREATER,
|
|
78
|
+
STATE_RUN,
|
|
79
|
+
ASYNC_EVAL_TIMEOUT_SEC,
|
|
80
|
+
get_global_debugger,
|
|
81
|
+
GetGlobalDebugger,
|
|
82
|
+
set_global_debugger, # Keep for backward compatibility @UnusedImport
|
|
83
|
+
silence_warnings_decorator,
|
|
84
|
+
filter_all_warnings,
|
|
85
|
+
IS_PY311_OR_GREATER,
|
|
86
|
+
)
|
|
77
87
|
from _pydev_bundle.pydev_override import overrides
|
|
78
88
|
import weakref
|
|
79
89
|
from _pydev_bundle._pydev_completer import extract_token_and_qualifier
|
|
80
|
-
from _pydevd_bundle._debug_adapter.pydevd_schema import
|
|
81
|
-
|
|
90
|
+
from _pydevd_bundle._debug_adapter.pydevd_schema import (
|
|
91
|
+
VariablesResponseBody,
|
|
92
|
+
SetVariableResponseBody,
|
|
93
|
+
StepInTarget,
|
|
94
|
+
StepInTargetsResponseBody,
|
|
95
|
+
)
|
|
82
96
|
from _pydevd_bundle._debug_adapter import pydevd_base_schema, pydevd_schema
|
|
83
97
|
from _pydevd_bundle.pydevd_net_command import NetCommand
|
|
84
98
|
from _pydevd_bundle.pydevd_xml import ExceptionOnEvaluate
|
|
@@ -97,8 +111,16 @@ from _pydevd_bundle import pydevd_xml
|
|
|
97
111
|
from _pydevd_bundle import pydevd_vm_type
|
|
98
112
|
import sys
|
|
99
113
|
import traceback
|
|
100
|
-
from _pydevd_bundle.pydevd_utils import
|
|
101
|
-
|
|
114
|
+
from _pydevd_bundle.pydevd_utils import (
|
|
115
|
+
quote_smart as quote,
|
|
116
|
+
compare_object_attrs_key,
|
|
117
|
+
notify_about_gevent_if_needed,
|
|
118
|
+
isinstance_checked,
|
|
119
|
+
ScopeRequest,
|
|
120
|
+
getattr_checked,
|
|
121
|
+
Timer,
|
|
122
|
+
is_current_thread_main_thread,
|
|
123
|
+
)
|
|
102
124
|
from _pydev_bundle import pydev_log, fsnotify
|
|
103
125
|
from _pydev_bundle.pydev_log import exception as pydev_log_exception
|
|
104
126
|
from _pydev_bundle import _pydev_completer
|
|
@@ -112,8 +134,9 @@ from io import StringIO
|
|
|
112
134
|
from _pydevd_bundle.pydevd_comm_constants import * # @UnusedWildImport
|
|
113
135
|
|
|
114
136
|
# Socket import aliases:
|
|
115
|
-
AF_INET, SOCK_STREAM, SHUT_WR, SOL_SOCKET, IPPROTO_TCP, socket = (
|
|
137
|
+
AF_INET, AF_INET6, SOCK_STREAM, SHUT_WR, SOL_SOCKET, IPPROTO_TCP, socket = (
|
|
116
138
|
socket_module.AF_INET,
|
|
139
|
+
socket_module.AF_INET6,
|
|
117
140
|
socket_module.SOCK_STREAM,
|
|
118
141
|
socket_module.SHUT_WR,
|
|
119
142
|
socket_module.SOL_SOCKET,
|
|
@@ -128,7 +151,7 @@ if not IS_WASM:
|
|
|
128
151
|
|
|
129
152
|
|
|
130
153
|
class ReaderThread(PyDBDaemonThread):
|
|
131
|
-
|
|
154
|
+
"""reader thread reads and dispatches commands in an infinite loop"""
|
|
132
155
|
|
|
133
156
|
def __init__(self, sock, py_db, PyDevJsonCommandProcessor, process_net_command, terminate_on_socket_close=True):
|
|
134
157
|
assert sock is not None
|
|
@@ -136,7 +159,7 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
136
159
|
self.__terminate_on_socket_close = terminate_on_socket_close
|
|
137
160
|
|
|
138
161
|
self.sock = sock
|
|
139
|
-
self._buffer = b
|
|
162
|
+
self._buffer = b""
|
|
140
163
|
self.name = "pydevd.Reader"
|
|
141
164
|
self.process_net_command = process_net_command
|
|
142
165
|
self.process_net_command_json = PyDevJsonCommandProcessor(self._from_json).process_net_command_json
|
|
@@ -175,7 +198,7 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
175
198
|
buffer_len = len(self._buffer)
|
|
176
199
|
if buffer_len == size:
|
|
177
200
|
ret = self._buffer
|
|
178
|
-
self._buffer = b
|
|
201
|
+
self._buffer = b""
|
|
179
202
|
return ret
|
|
180
203
|
|
|
181
204
|
if buffer_len > size:
|
|
@@ -186,14 +209,14 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
186
209
|
try:
|
|
187
210
|
r = self.sock.recv(max(size - buffer_len, 1024))
|
|
188
211
|
except OSError:
|
|
189
|
-
return b
|
|
212
|
+
return b""
|
|
190
213
|
if not r:
|
|
191
|
-
return b
|
|
214
|
+
return b""
|
|
192
215
|
self._buffer += r
|
|
193
216
|
|
|
194
217
|
def _read_line(self):
|
|
195
218
|
while True:
|
|
196
|
-
i = self._buffer.find(b
|
|
219
|
+
i = self._buffer.find(b"\n")
|
|
197
220
|
if i != -1:
|
|
198
221
|
i += 1 # Add the newline to the return
|
|
199
222
|
ret = self._buffer[:i]
|
|
@@ -203,9 +226,9 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
203
226
|
try:
|
|
204
227
|
r = self.sock.recv(1024)
|
|
205
228
|
except OSError:
|
|
206
|
-
return b
|
|
229
|
+
return b""
|
|
207
230
|
if not r:
|
|
208
|
-
return b
|
|
231
|
+
return b""
|
|
209
232
|
self._buffer += r
|
|
210
233
|
|
|
211
234
|
@overrides(PyDBDaemonThread._on_run)
|
|
@@ -222,26 +245,26 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
222
245
|
line = self._read_line()
|
|
223
246
|
|
|
224
247
|
if len(line) == 0:
|
|
225
|
-
pydev_log.debug(
|
|
248
|
+
pydev_log.debug("ReaderThread: empty contents received (len(line) == 0).")
|
|
226
249
|
self._terminate_on_socket_close()
|
|
227
250
|
return # Finished communication.
|
|
228
251
|
|
|
229
252
|
if self._kill_received:
|
|
230
253
|
continue
|
|
231
254
|
|
|
232
|
-
if line.startswith(b
|
|
233
|
-
content_len = int(line.strip().split(b
|
|
255
|
+
if line.startswith(b"Content-Length:"):
|
|
256
|
+
content_len = int(line.strip().split(b":", 1)[1])
|
|
234
257
|
continue
|
|
235
258
|
|
|
236
259
|
if content_len != -1:
|
|
237
260
|
# If we previously received a content length, read until a '\r\n'.
|
|
238
|
-
if line == b
|
|
261
|
+
if line == b"\r\n":
|
|
239
262
|
json_contents = self._read(content_len)
|
|
240
263
|
|
|
241
264
|
content_len = -1
|
|
242
265
|
|
|
243
266
|
if len(json_contents) == 0:
|
|
244
|
-
pydev_log.debug(
|
|
267
|
+
pydev_log.debug("ReaderThread: empty contents received (len(json_contents) == 0).")
|
|
245
268
|
self._terminate_on_socket_close()
|
|
246
269
|
return # Finished communication.
|
|
247
270
|
|
|
@@ -254,13 +277,13 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
254
277
|
continue
|
|
255
278
|
else:
|
|
256
279
|
# No content len, regular line-based protocol message (remove trailing new-line).
|
|
257
|
-
if line.endswith(b
|
|
280
|
+
if line.endswith(b"\n\n"):
|
|
258
281
|
line = line[:-2]
|
|
259
282
|
|
|
260
|
-
elif line.endswith(b
|
|
283
|
+
elif line.endswith(b"\n"):
|
|
261
284
|
line = line[:-1]
|
|
262
285
|
|
|
263
|
-
elif line.endswith(b
|
|
286
|
+
elif line.endswith(b"\r"):
|
|
264
287
|
line = line[:-1]
|
|
265
288
|
except:
|
|
266
289
|
if not self._kill_received:
|
|
@@ -271,17 +294,17 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
271
294
|
# Note: the java backend is always expected to pass utf-8 encoded strings. We now work with str
|
|
272
295
|
# internally and thus, we may need to convert to the actual encoding where needed (i.e.: filenames
|
|
273
296
|
# on python 2 may need to be converted to the filesystem encoding).
|
|
274
|
-
if hasattr(line,
|
|
275
|
-
line = line.decode(
|
|
297
|
+
if hasattr(line, "decode"):
|
|
298
|
+
line = line.decode("utf-8")
|
|
276
299
|
|
|
277
300
|
if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 3:
|
|
278
|
-
pydev_log.debug(
|
|
301
|
+
pydev_log.debug("debugger: received >>%s<<\n", line)
|
|
279
302
|
|
|
280
|
-
args = line.split(
|
|
303
|
+
args = line.split("\t", 2)
|
|
281
304
|
try:
|
|
282
305
|
cmd_id = int(args[0])
|
|
283
306
|
if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 3:
|
|
284
|
-
pydev_log.debug(
|
|
307
|
+
pydev_log.debug("Received command: %s %s\n", ID_TO_MEANING.get(str(cmd_id), "???"), line)
|
|
285
308
|
self.process_command(cmd_id, int(args[1]), args[2])
|
|
286
309
|
except:
|
|
287
310
|
if sys is not None and pydev_log_exception is not None: # Could happen at interpreter shutdown
|
|
@@ -294,7 +317,7 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
294
317
|
|
|
295
318
|
self._terminate_on_socket_close()
|
|
296
319
|
finally:
|
|
297
|
-
pydev_log.debug(
|
|
320
|
+
pydev_log.debug("ReaderThread: exit")
|
|
298
321
|
|
|
299
322
|
def _terminate_on_socket_close(self):
|
|
300
323
|
if self.__terminate_on_socket_close:
|
|
@@ -305,7 +328,6 @@ class ReaderThread(PyDBDaemonThread):
|
|
|
305
328
|
|
|
306
329
|
|
|
307
330
|
class FSNotifyThread(PyDBDaemonThread):
|
|
308
|
-
|
|
309
331
|
def __init__(self, py_db, api, watch_dirs):
|
|
310
332
|
PyDBDaemonThread.__init__(self, py_db)
|
|
311
333
|
self.api = api
|
|
@@ -316,7 +338,7 @@ class FSNotifyThread(PyDBDaemonThread):
|
|
|
316
338
|
@overrides(PyDBDaemonThread._on_run)
|
|
317
339
|
def _on_run(self):
|
|
318
340
|
try:
|
|
319
|
-
pydev_log.info(
|
|
341
|
+
pydev_log.info("Watching directories for code reload:\n---\n%s\n---" % ("\n".join(sorted(self.watch_dirs))))
|
|
320
342
|
|
|
321
343
|
# i.e.: The first call to set_tracked_paths will do a full scan, so, do it in the thread
|
|
322
344
|
# too (after everything is configured).
|
|
@@ -325,12 +347,12 @@ class FSNotifyThread(PyDBDaemonThread):
|
|
|
325
347
|
for change_enum, change_path in self.watcher.iter_changes():
|
|
326
348
|
# We're only interested in modified events
|
|
327
349
|
if change_enum == fsnotify.Change.modified:
|
|
328
|
-
pydev_log.info(
|
|
350
|
+
pydev_log.info("Modified: %s", change_path)
|
|
329
351
|
self.api.request_reload_code(self.py_db, -1, None, change_path)
|
|
330
352
|
else:
|
|
331
|
-
pydev_log.info(
|
|
353
|
+
pydev_log.info("Ignored (add or remove) change in: %s", change_path)
|
|
332
354
|
except:
|
|
333
|
-
pydev_log.exception(
|
|
355
|
+
pydev_log.exception("Error when waiting for filesystem changes in FSNotifyThread.")
|
|
334
356
|
|
|
335
357
|
@overrides(PyDBDaemonThread.do_kill_pydev_thread)
|
|
336
358
|
def do_kill_pydev_thread(self):
|
|
@@ -339,7 +361,7 @@ class FSNotifyThread(PyDBDaemonThread):
|
|
|
339
361
|
|
|
340
362
|
|
|
341
363
|
class WriterThread(PyDBDaemonThread):
|
|
342
|
-
|
|
364
|
+
"""writer thread writes out the commands in an infinite loop"""
|
|
343
365
|
|
|
344
366
|
def __init__(self, sock, py_db, terminate_on_socket_close=True):
|
|
345
367
|
PyDBDaemonThread.__init__(self, py_db)
|
|
@@ -347,19 +369,19 @@ class WriterThread(PyDBDaemonThread):
|
|
|
347
369
|
self.__terminate_on_socket_close = terminate_on_socket_close
|
|
348
370
|
self.name = "pydevd.Writer"
|
|
349
371
|
self._cmd_queue = _queue.Queue()
|
|
350
|
-
if pydevd_vm_type.get_vm_type() ==
|
|
372
|
+
if pydevd_vm_type.get_vm_type() == "python":
|
|
351
373
|
self.timeout = 0
|
|
352
374
|
else:
|
|
353
375
|
self.timeout = 0.1
|
|
354
376
|
|
|
355
377
|
def add_command(self, cmd):
|
|
356
|
-
|
|
378
|
+
"""cmd is NetCommand"""
|
|
357
379
|
if not self._kill_received: # we don't take new data after everybody die
|
|
358
380
|
self._cmd_queue.put(cmd, False)
|
|
359
381
|
|
|
360
382
|
@overrides(PyDBDaemonThread._on_run)
|
|
361
383
|
def _on_run(self):
|
|
362
|
-
|
|
384
|
+
"""just loop and write responses"""
|
|
363
385
|
|
|
364
386
|
try:
|
|
365
387
|
while True:
|
|
@@ -368,7 +390,7 @@ class WriterThread(PyDBDaemonThread):
|
|
|
368
390
|
cmd = self._cmd_queue.get(True, 0.1)
|
|
369
391
|
except _queue.Empty:
|
|
370
392
|
if self._kill_received:
|
|
371
|
-
pydev_log.debug(
|
|
393
|
+
pydev_log.debug("WriterThread: kill_received (sock.shutdown(SHUT_WR))")
|
|
372
394
|
try:
|
|
373
395
|
self.sock.shutdown(SHUT_WR)
|
|
374
396
|
except:
|
|
@@ -400,7 +422,7 @@ class WriterThread(PyDBDaemonThread):
|
|
|
400
422
|
cmd.send(self.sock)
|
|
401
423
|
|
|
402
424
|
if cmd.id == CMD_EXIT:
|
|
403
|
-
pydev_log.debug(
|
|
425
|
+
pydev_log.debug("WriterThread: CMD_EXIT received")
|
|
404
426
|
break
|
|
405
427
|
if time is None:
|
|
406
428
|
break # interpreter shutdown
|
|
@@ -411,7 +433,7 @@ class WriterThread(PyDBDaemonThread):
|
|
|
411
433
|
if DebugInfoHolder.DEBUG_TRACE_LEVEL > 0:
|
|
412
434
|
pydev_log_exception()
|
|
413
435
|
finally:
|
|
414
|
-
pydev_log.debug(
|
|
436
|
+
pydev_log.debug("WriterThread: exit")
|
|
415
437
|
|
|
416
438
|
def empty(self):
|
|
417
439
|
return self._cmd_queue.empty()
|
|
@@ -444,11 +466,17 @@ def create_server_socket(host, port):
|
|
|
444
466
|
|
|
445
467
|
|
|
446
468
|
def start_server(port):
|
|
447
|
-
|
|
448
|
-
s = create_server_socket(host=
|
|
469
|
+
"""binds to a port, waits for the debugger to connect"""
|
|
470
|
+
s = create_server_socket(host="", port=port)
|
|
449
471
|
|
|
450
472
|
try:
|
|
451
473
|
s.listen(1)
|
|
474
|
+
# Let the user know it's halted waiting for the connection.
|
|
475
|
+
host, port = s.getsockname()
|
|
476
|
+
msg = f"pydevd: waiting for connection at: {host}:{port}"
|
|
477
|
+
print(msg, file=sys.stderr)
|
|
478
|
+
pydev_log.info(msg)
|
|
479
|
+
|
|
452
480
|
new_socket, _addr = s.accept()
|
|
453
481
|
pydev_log.info("Connection accepted")
|
|
454
482
|
# closing server socket is not necessary but we don't need it
|
|
@@ -460,10 +488,20 @@ def start_server(port):
|
|
|
460
488
|
|
|
461
489
|
|
|
462
490
|
def start_client(host, port):
|
|
463
|
-
|
|
491
|
+
"""connects to a host/port"""
|
|
464
492
|
pydev_log.info("Connecting to %s:%s", host, port)
|
|
465
493
|
|
|
466
|
-
|
|
494
|
+
address_family = AF_INET
|
|
495
|
+
for res in socket_module.getaddrinfo(host, port, 0, SOCK_STREAM):
|
|
496
|
+
if res[0] == AF_INET:
|
|
497
|
+
address_family = res[0]
|
|
498
|
+
# Prefer IPv4 addresses for backward compat.
|
|
499
|
+
break
|
|
500
|
+
if res[0] == AF_INET6:
|
|
501
|
+
# Don't break after this - if the socket is dual-stack prefer IPv4.
|
|
502
|
+
address_family = res[0]
|
|
503
|
+
|
|
504
|
+
s = socket(address_family, SOCK_STREAM)
|
|
467
505
|
|
|
468
506
|
# Set TCP keepalive on an open socket.
|
|
469
507
|
# It activates after 1 second (TCP_KEEPIDLE,) of idleness,
|
|
@@ -488,11 +526,11 @@ def start_client(host, port):
|
|
|
488
526
|
|
|
489
527
|
try:
|
|
490
528
|
# 10 seconds default timeout
|
|
491
|
-
timeout = int(os.environ.get(
|
|
529
|
+
timeout = int(os.environ.get("PYDEVD_CONNECT_TIMEOUT", 10))
|
|
492
530
|
s.settimeout(timeout)
|
|
493
531
|
s.connect((host, port))
|
|
494
532
|
s.settimeout(None) # no timeout after connected
|
|
495
|
-
pydev_log.info("Connected.")
|
|
533
|
+
pydev_log.info(f"Connected to: {s}.")
|
|
496
534
|
return s
|
|
497
535
|
except:
|
|
498
536
|
pydev_log.exception("Could not connect to %s: %s", host, port)
|
|
@@ -504,12 +542,12 @@ INTERNAL_SUSPEND_THREAD = 2
|
|
|
504
542
|
|
|
505
543
|
|
|
506
544
|
class InternalThreadCommand(object):
|
|
507
|
-
|
|
545
|
+
"""internal commands are generated/executed by the debugger.
|
|
508
546
|
|
|
509
547
|
The reason for their existence is that some commands have to be executed
|
|
510
548
|
on specific threads. These are the InternalThreadCommands that get
|
|
511
549
|
get posted to PyDB.
|
|
512
|
-
|
|
550
|
+
"""
|
|
513
551
|
|
|
514
552
|
def __init__(self, thread_id, method=None, *args, **kwargs):
|
|
515
553
|
self.thread_id = thread_id
|
|
@@ -518,9 +556,8 @@ class InternalThreadCommand(object):
|
|
|
518
556
|
self.kwargs = kwargs
|
|
519
557
|
|
|
520
558
|
def can_be_executed_by(self, thread_id):
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
return self.thread_id == thread_id or self.thread_id.endswith('|' + thread_id)
|
|
559
|
+
"""By default, it must be in the same thread to be executed"""
|
|
560
|
+
return self.thread_id == thread_id or self.thread_id.endswith("|" + thread_id)
|
|
524
561
|
|
|
525
562
|
def do_it(self, dbg):
|
|
526
563
|
try:
|
|
@@ -533,15 +570,14 @@ class InternalThreadCommand(object):
|
|
|
533
570
|
self.kwargs = None
|
|
534
571
|
|
|
535
572
|
def __str__(self):
|
|
536
|
-
return
|
|
573
|
+
return "InternalThreadCommands(%s, %s, %s)" % (self.method, self.args, self.kwargs)
|
|
537
574
|
|
|
538
575
|
__repr__ = __str__
|
|
539
576
|
|
|
540
577
|
|
|
541
578
|
class InternalThreadCommandForAnyThread(InternalThreadCommand):
|
|
542
|
-
|
|
543
579
|
def __init__(self, thread_id, method=None, *args, **kwargs):
|
|
544
|
-
assert thread_id ==
|
|
580
|
+
assert thread_id == "*"
|
|
545
581
|
|
|
546
582
|
InternalThreadCommand.__init__(self, thread_id, method, *args, **kwargs)
|
|
547
583
|
|
|
@@ -572,8 +608,8 @@ def internal_reload_code(dbg, seq, module_name, filename):
|
|
|
572
608
|
if module_name is not None:
|
|
573
609
|
module_name = module_name
|
|
574
610
|
if module_name not in sys.modules:
|
|
575
|
-
if
|
|
576
|
-
new_module_name = module_name.split(
|
|
611
|
+
if "." in module_name:
|
|
612
|
+
new_module_name = module_name.split(".")[-1]
|
|
577
613
|
if new_module_name in sys.modules:
|
|
578
614
|
module_name = new_module_name
|
|
579
615
|
|
|
@@ -585,9 +621,9 @@ def internal_reload_code(dbg, seq, module_name, filename):
|
|
|
585
621
|
if filename:
|
|
586
622
|
filename = pydevd_file_utils.normcase(filename)
|
|
587
623
|
for module_name, module in sys.modules.copy().items():
|
|
588
|
-
f = getattr_checked(module,
|
|
624
|
+
f = getattr_checked(module, "__file__")
|
|
589
625
|
if f is not None:
|
|
590
|
-
if f.endswith((
|
|
626
|
+
if f.endswith((".pyc", ".pyo")):
|
|
591
627
|
f = f[:-1]
|
|
592
628
|
|
|
593
629
|
if pydevd_file_utils.normcase(f) == filename:
|
|
@@ -595,11 +631,11 @@ def internal_reload_code(dbg, seq, module_name, filename):
|
|
|
595
631
|
|
|
596
632
|
if not modules_to_reload:
|
|
597
633
|
if filename and module_name:
|
|
598
|
-
_send_io_message(dbg,
|
|
634
|
+
_send_io_message(dbg, "code reload: Unable to find module %s to reload for path: %s\n" % (module_name, filename))
|
|
599
635
|
elif filename:
|
|
600
|
-
_send_io_message(dbg,
|
|
636
|
+
_send_io_message(dbg, "code reload: Unable to find module to reload for path: %s\n" % (filename,))
|
|
601
637
|
elif module_name:
|
|
602
|
-
_send_io_message(dbg,
|
|
638
|
+
_send_io_message(dbg, "code reload: Unable to find module to reload: %s\n" % (module_name,))
|
|
603
639
|
|
|
604
640
|
else:
|
|
605
641
|
# Too much info...
|
|
@@ -609,25 +645,25 @@ def internal_reload_code(dbg, seq, module_name, filename):
|
|
|
609
645
|
found_module_to_reload = True
|
|
610
646
|
|
|
611
647
|
if pydevd_reload.xreload(module):
|
|
612
|
-
_send_io_message(dbg,
|
|
648
|
+
_send_io_message(dbg, "code reload: reload finished\n")
|
|
613
649
|
else:
|
|
614
|
-
_send_io_message(dbg,
|
|
650
|
+
_send_io_message(dbg, "code reload: reload finished without applying any change\n")
|
|
615
651
|
|
|
616
652
|
cmd = dbg.cmd_factory.make_reloaded_code_message(seq, found_module_to_reload)
|
|
617
653
|
dbg.writer.add_command(cmd)
|
|
618
654
|
except:
|
|
619
|
-
pydev_log.exception(
|
|
655
|
+
pydev_log.exception("Error reloading code")
|
|
620
656
|
|
|
621
657
|
|
|
622
658
|
class InternalGetThreadStack(InternalThreadCommand):
|
|
623
|
-
|
|
659
|
+
"""
|
|
624
660
|
This command will either wait for a given thread to be paused to get its stack or will provide
|
|
625
661
|
it anyways after a timeout (in which case the stack will be gotten but local variables won't
|
|
626
662
|
be available and it'll not be possible to interact with the frame as it's not actually
|
|
627
663
|
stopped in a breakpoint).
|
|
628
|
-
|
|
664
|
+
"""
|
|
629
665
|
|
|
630
|
-
def __init__(self, seq, thread_id, py_db, set_additional_thread_info, fmt, timeout
|
|
666
|
+
def __init__(self, seq, thread_id, py_db, set_additional_thread_info, fmt, timeout=0.5, start_frame=0, levels=0):
|
|
631
667
|
InternalThreadCommand.__init__(self, thread_id)
|
|
632
668
|
self._py_db = weakref.ref(py_db)
|
|
633
669
|
self._timeout = time.time() + timeout
|
|
@@ -648,12 +684,20 @@ class InternalGetThreadStack(InternalThreadCommand):
|
|
|
648
684
|
py_db = self._py_db()
|
|
649
685
|
t = pydevd_find_thread_by_id(self.thread_id)
|
|
650
686
|
frame = None
|
|
651
|
-
if t and not getattr(t,
|
|
687
|
+
if t and not getattr(t, "pydev_do_not_trace", None):
|
|
652
688
|
additional_info = self._set_additional_thread_info(t)
|
|
653
689
|
frame = additional_info.get_topmost_frame(t)
|
|
654
690
|
try:
|
|
655
691
|
self._cmd = py_db.cmd_factory.make_get_thread_stack_message(
|
|
656
|
-
py_db,
|
|
692
|
+
py_db,
|
|
693
|
+
self.seq,
|
|
694
|
+
self.thread_id,
|
|
695
|
+
frame,
|
|
696
|
+
self._fmt,
|
|
697
|
+
must_be_suspended=not timed_out,
|
|
698
|
+
start_frame=self._start_frame,
|
|
699
|
+
levels=self._levels,
|
|
700
|
+
)
|
|
657
701
|
finally:
|
|
658
702
|
frame = None
|
|
659
703
|
t = None
|
|
@@ -675,9 +719,10 @@ def internal_step_in_thread(py_db, thread_id, cmd_id, set_additional_thread_info
|
|
|
675
719
|
info.pydev_step_cmd = cmd_id
|
|
676
720
|
info.pydev_step_stop = None
|
|
677
721
|
info.pydev_state = STATE_RUN
|
|
722
|
+
info.update_stepping_info()
|
|
678
723
|
|
|
679
724
|
if py_db.stepping_resumes_all_threads:
|
|
680
|
-
resume_threads(
|
|
725
|
+
resume_threads("*", except_thread=thread_to_step)
|
|
681
726
|
|
|
682
727
|
|
|
683
728
|
def internal_smart_step_into(py_db, thread_id, offset, child_offset, set_additional_thread_info):
|
|
@@ -690,21 +735,21 @@ def internal_smart_step_into(py_db, thread_id, offset, child_offset, set_additio
|
|
|
690
735
|
info.pydev_smart_parent_offset = int(offset)
|
|
691
736
|
info.pydev_smart_child_offset = int(child_offset)
|
|
692
737
|
info.pydev_state = STATE_RUN
|
|
738
|
+
info.update_stepping_info()
|
|
693
739
|
|
|
694
740
|
if py_db.stepping_resumes_all_threads:
|
|
695
|
-
resume_threads(
|
|
741
|
+
resume_threads("*", except_thread=thread_to_step)
|
|
696
742
|
|
|
697
743
|
|
|
698
744
|
class InternalSetNextStatementThread(InternalThreadCommand):
|
|
699
|
-
|
|
700
745
|
def __init__(self, thread_id, cmd_id, line, func_name, seq=0):
|
|
701
|
-
|
|
746
|
+
"""
|
|
702
747
|
cmd_id may actually be one of:
|
|
703
748
|
|
|
704
749
|
CMD_RUN_TO_LINE
|
|
705
750
|
CMD_SET_NEXT_STATEMENT
|
|
706
751
|
CMD_SMART_STEP_INTO
|
|
707
|
-
|
|
752
|
+
"""
|
|
708
753
|
self.thread_id = thread_id
|
|
709
754
|
self.cmd_id = cmd_id
|
|
710
755
|
self.line = line
|
|
@@ -725,13 +770,14 @@ class InternalSetNextStatementThread(InternalThreadCommand):
|
|
|
725
770
|
info.pydev_smart_parent_offset = -1
|
|
726
771
|
info.pydev_smart_child_offset = -1
|
|
727
772
|
info.pydev_state = STATE_RUN
|
|
773
|
+
info.update_stepping_info()
|
|
728
774
|
|
|
729
775
|
|
|
730
776
|
@silence_warnings_decorator
|
|
731
777
|
def internal_get_variable_json(py_db, request):
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
778
|
+
"""
|
|
779
|
+
:param VariablesRequest request:
|
|
780
|
+
"""
|
|
735
781
|
arguments = request.arguments # : :type arguments: VariablesArguments
|
|
736
782
|
variables_reference = arguments.variablesReference
|
|
737
783
|
scope = None
|
|
@@ -740,7 +786,7 @@ def internal_get_variable_json(py_db, request):
|
|
|
740
786
|
variables_reference = variables_reference.variable_reference
|
|
741
787
|
|
|
742
788
|
fmt = arguments.format
|
|
743
|
-
if hasattr(fmt,
|
|
789
|
+
if hasattr(fmt, "to_dict"):
|
|
744
790
|
fmt = fmt.to_dict()
|
|
745
791
|
|
|
746
792
|
variables = []
|
|
@@ -755,25 +801,20 @@ def internal_get_variable_json(py_db, request):
|
|
|
755
801
|
except:
|
|
756
802
|
try:
|
|
757
803
|
exc, exc_type, tb = sys.exc_info()
|
|
758
|
-
err =
|
|
759
|
-
variables = [{
|
|
760
|
-
'name': '<error>',
|
|
761
|
-
'value': err,
|
|
762
|
-
'type': '<error>',
|
|
763
|
-
'variablesReference': 0
|
|
764
|
-
}]
|
|
804
|
+
err = "".join(traceback.format_exception(exc, exc_type, tb))
|
|
805
|
+
variables = [{"name": "<error>", "value": err, "type": "<error>", "variablesReference": 0}]
|
|
765
806
|
except:
|
|
766
|
-
err =
|
|
807
|
+
err = "<Internal error - unable to get traceback when getting variables>"
|
|
767
808
|
pydev_log.exception(err)
|
|
768
809
|
variables = []
|
|
769
810
|
|
|
770
811
|
body = VariablesResponseBody(variables)
|
|
771
|
-
variables_response = pydevd_base_schema.build_response(request, kwargs={
|
|
812
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
|
|
772
813
|
py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
|
|
773
814
|
|
|
774
815
|
|
|
775
816
|
class InternalGetVariable(InternalThreadCommand):
|
|
776
|
-
|
|
817
|
+
"""gets the value of a variable"""
|
|
777
818
|
|
|
778
819
|
def __init__(self, seq, thread_id, frame_id, scope, attrs):
|
|
779
820
|
self.sequence = seq
|
|
@@ -784,12 +825,13 @@ class InternalGetVariable(InternalThreadCommand):
|
|
|
784
825
|
|
|
785
826
|
@silence_warnings_decorator
|
|
786
827
|
def do_it(self, dbg):
|
|
787
|
-
|
|
828
|
+
"""Converts request into python variable"""
|
|
788
829
|
try:
|
|
789
830
|
xml = StringIO()
|
|
790
831
|
xml.write("<xml>")
|
|
791
832
|
type_name, val_dict = pydevd_vars.resolve_compound_variable_fields(
|
|
792
|
-
dbg, self.thread_id, self.frame_id, self.scope, self.attributes
|
|
833
|
+
dbg, self.thread_id, self.frame_id, self.scope, self.attributes
|
|
834
|
+
)
|
|
793
835
|
if val_dict is None:
|
|
794
836
|
val_dict = {}
|
|
795
837
|
|
|
@@ -811,13 +853,11 @@ class InternalGetVariable(InternalThreadCommand):
|
|
|
811
853
|
xml.close()
|
|
812
854
|
dbg.writer.add_command(cmd)
|
|
813
855
|
except Exception:
|
|
814
|
-
cmd = dbg.cmd_factory.make_error_message(
|
|
815
|
-
self.sequence, "Error resolving variables %s" % (get_exception_traceback_str(),))
|
|
856
|
+
cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error resolving variables %s" % (get_exception_traceback_str(),))
|
|
816
857
|
dbg.writer.add_command(cmd)
|
|
817
858
|
|
|
818
859
|
|
|
819
860
|
class InternalGetArray(InternalThreadCommand):
|
|
820
|
-
|
|
821
861
|
def __init__(self, seq, roffset, coffset, rows, cols, format, thread_id, frame_id, scope, attrs):
|
|
822
862
|
self.sequence = seq
|
|
823
863
|
self.thread_id = thread_id
|
|
@@ -844,7 +884,7 @@ class InternalGetArray(InternalThreadCommand):
|
|
|
844
884
|
|
|
845
885
|
|
|
846
886
|
def internal_change_variable(dbg, seq, thread_id, frame_id, scope, attr, value):
|
|
847
|
-
|
|
887
|
+
"""Changes the value of a variable"""
|
|
848
888
|
try:
|
|
849
889
|
frame = dbg.find_frame(thread_id, frame_id)
|
|
850
890
|
if frame is not None:
|
|
@@ -857,18 +897,20 @@ def internal_change_variable(dbg, seq, thread_id, frame_id, scope, attr, value):
|
|
|
857
897
|
cmd = dbg.cmd_factory.make_variable_changed_message(seq, xml)
|
|
858
898
|
dbg.writer.add_command(cmd)
|
|
859
899
|
except Exception:
|
|
860
|
-
cmd = dbg.cmd_factory.make_error_message(
|
|
900
|
+
cmd = dbg.cmd_factory.make_error_message(
|
|
901
|
+
seq, "Error changing variable attr:%s expression:%s traceback:%s" % (attr, value, get_exception_traceback_str())
|
|
902
|
+
)
|
|
861
903
|
dbg.writer.add_command(cmd)
|
|
862
904
|
|
|
863
905
|
|
|
864
906
|
def internal_change_variable_json(py_db, request):
|
|
865
|
-
|
|
907
|
+
"""
|
|
866
908
|
The pydevd_vars.change_attr_expression(thread_id, frame_id, attr, value, dbg) can only
|
|
867
909
|
deal with changing at a frame level, so, currently changing the contents of something
|
|
868
910
|
in a different scope is currently not supported.
|
|
869
911
|
|
|
870
912
|
:param SetVariableRequest request:
|
|
871
|
-
|
|
913
|
+
"""
|
|
872
914
|
# : :type arguments: SetVariableArguments
|
|
873
915
|
arguments = request.arguments
|
|
874
916
|
variables_reference = arguments.variablesReference
|
|
@@ -878,7 +920,7 @@ def internal_change_variable_json(py_db, request):
|
|
|
878
920
|
variables_reference = variables_reference.variable_reference
|
|
879
921
|
|
|
880
922
|
fmt = arguments.format
|
|
881
|
-
if hasattr(fmt,
|
|
923
|
+
if hasattr(fmt, "to_dict"):
|
|
882
924
|
fmt = fmt.to_dict()
|
|
883
925
|
|
|
884
926
|
try:
|
|
@@ -888,44 +930,38 @@ def internal_change_variable_json(py_db, request):
|
|
|
888
930
|
|
|
889
931
|
if variable is None:
|
|
890
932
|
_write_variable_response(
|
|
891
|
-
py_db, request, value=
|
|
933
|
+
py_db, request, value="", success=False, message="Unable to find variable container to change: %s." % (variables_reference,)
|
|
934
|
+
)
|
|
892
935
|
return
|
|
893
936
|
|
|
894
937
|
child_var = variable.change_variable(arguments.name, arguments.value, py_db, fmt=fmt)
|
|
895
938
|
|
|
896
939
|
if child_var is None:
|
|
897
|
-
_write_variable_response(
|
|
898
|
-
py_db, request, value='', success=False, message='Unable to change: %s.' % (arguments.name,))
|
|
940
|
+
_write_variable_response(py_db, request, value="", success=False, message="Unable to change: %s." % (arguments.name,))
|
|
899
941
|
return
|
|
900
942
|
|
|
901
943
|
var_data = child_var.get_var_data(fmt=fmt)
|
|
902
944
|
body = SetVariableResponseBody(
|
|
903
|
-
value=var_data[
|
|
904
|
-
type=var_data[
|
|
905
|
-
variablesReference=var_data.get(
|
|
906
|
-
namedVariables=var_data.get(
|
|
907
|
-
indexedVariables=var_data.get(
|
|
945
|
+
value=var_data["value"],
|
|
946
|
+
type=var_data["type"],
|
|
947
|
+
variablesReference=var_data.get("variablesReference"),
|
|
948
|
+
namedVariables=var_data.get("namedVariables"),
|
|
949
|
+
indexedVariables=var_data.get("indexedVariables"),
|
|
908
950
|
)
|
|
909
|
-
variables_response = pydevd_base_schema.build_response(request, kwargs={
|
|
951
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
|
|
910
952
|
py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
|
|
911
953
|
|
|
912
954
|
|
|
913
955
|
def _write_variable_response(py_db, request, value, success, message):
|
|
914
|
-
body = SetVariableResponseBody(
|
|
915
|
-
variables_response = pydevd_base_schema.build_response(
|
|
916
|
-
request,
|
|
917
|
-
kwargs={
|
|
918
|
-
'body':body,
|
|
919
|
-
'success': False,
|
|
920
|
-
'message': message
|
|
921
|
-
})
|
|
956
|
+
body = SetVariableResponseBody("")
|
|
957
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": message})
|
|
922
958
|
cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True)
|
|
923
959
|
py_db.writer.add_command(cmd)
|
|
924
960
|
|
|
925
961
|
|
|
926
962
|
@silence_warnings_decorator
|
|
927
963
|
def internal_get_frame(dbg, seq, thread_id, frame_id):
|
|
928
|
-
|
|
964
|
+
"""Converts request into python variable"""
|
|
929
965
|
try:
|
|
930
966
|
frame = dbg.find_frame(thread_id, frame_id)
|
|
931
967
|
if frame is not None:
|
|
@@ -972,21 +1008,33 @@ def internal_get_smart_step_into_variants(dbg, seq, thread_id, frame_id, start_l
|
|
|
972
1008
|
for child_variant in variant.children_variants:
|
|
973
1009
|
# If there are child variants, the current one is just an intermediary, so,
|
|
974
1010
|
# just create variants for the child (notifying properly about the parent too).
|
|
975
|
-
xml +=
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
1011
|
+
xml += (
|
|
1012
|
+
'<variant name="%s" isVisited="%s" line="%s" offset="%s" childOffset="%s" callOrder="%s" endlineno="%s" startcol="%s" endcol="%s"/>'
|
|
1013
|
+
% (
|
|
1014
|
+
quote(child_variant.name),
|
|
1015
|
+
str(child_variant.is_visited).lower(),
|
|
1016
|
+
child_variant.line,
|
|
1017
|
+
variant.offset,
|
|
1018
|
+
child_variant.offset,
|
|
1019
|
+
child_variant.call_order,
|
|
1020
|
+
variant.endlineno,
|
|
1021
|
+
variant.startcol,
|
|
1022
|
+
variant.endcol,
|
|
1023
|
+
)
|
|
982
1024
|
)
|
|
983
1025
|
else:
|
|
984
|
-
xml +=
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
1026
|
+
xml += (
|
|
1027
|
+
'<variant name="%s" isVisited="%s" line="%s" offset="%s" childOffset="-1" callOrder="%s" endlineno="%s" startcol="%s" endcol="%s"/>'
|
|
1028
|
+
% (
|
|
1029
|
+
quote(variant.name),
|
|
1030
|
+
str(variant.is_visited).lower(),
|
|
1031
|
+
variant.line,
|
|
1032
|
+
variant.offset,
|
|
1033
|
+
variant.call_order,
|
|
1034
|
+
variant.endlineno,
|
|
1035
|
+
variant.startcol,
|
|
1036
|
+
variant.endcol,
|
|
1037
|
+
)
|
|
990
1038
|
)
|
|
991
1039
|
|
|
992
1040
|
xml += "</xml>"
|
|
@@ -994,10 +1042,10 @@ def internal_get_smart_step_into_variants(dbg, seq, thread_id, frame_id, start_l
|
|
|
994
1042
|
dbg.writer.add_command(cmd)
|
|
995
1043
|
except:
|
|
996
1044
|
# Error is expected (if `dis` module cannot be used -- i.e.: Jython).
|
|
997
|
-
pydev_log.exception(
|
|
1045
|
+
pydev_log.exception("Error calculating Smart Step Into Variants.")
|
|
998
1046
|
cmd = dbg.cmd_factory.make_error_message(
|
|
999
|
-
seq, "Error getting smart step into variants for frame: %s from thread: %s"
|
|
1000
|
-
|
|
1047
|
+
seq, "Error getting smart step into variants for frame: %s from thread: %s" % (frame_id, thread_id)
|
|
1048
|
+
)
|
|
1001
1049
|
dbg.writer.add_command(cmd)
|
|
1002
1050
|
|
|
1003
1051
|
|
|
@@ -1009,12 +1057,8 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se
|
|
|
1009
1057
|
if thread is None or frame is None:
|
|
1010
1058
|
body = StepInTargetsResponseBody([])
|
|
1011
1059
|
variables_response = pydevd_base_schema.build_response(
|
|
1012
|
-
request,
|
|
1013
|
-
|
|
1014
|
-
'body': body,
|
|
1015
|
-
'success': False,
|
|
1016
|
-
'message': 'Thread to get step in targets seems to have resumed already.'
|
|
1017
|
-
})
|
|
1060
|
+
request, kwargs={"body": body, "success": False, "message": "Thread to get step in targets seems to have resumed already."}
|
|
1061
|
+
)
|
|
1018
1062
|
cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True)
|
|
1019
1063
|
dbg.writer.add_command(cmd)
|
|
1020
1064
|
return
|
|
@@ -1037,7 +1081,12 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se
|
|
|
1037
1081
|
target_id = next(counter)
|
|
1038
1082
|
|
|
1039
1083
|
if child_variant.call_order > 1:
|
|
1040
|
-
targets.append(
|
|
1084
|
+
targets.append(
|
|
1085
|
+
StepInTarget(
|
|
1086
|
+
id=target_id,
|
|
1087
|
+
label="%s (call %s)" % (child_variant.name, child_variant.call_order),
|
|
1088
|
+
)
|
|
1089
|
+
)
|
|
1041
1090
|
else:
|
|
1042
1091
|
targets.append(StepInTarget(id=target_id, label=child_variant.name))
|
|
1043
1092
|
target_id_to_variant[target_id] = child_variant
|
|
@@ -1047,7 +1096,12 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se
|
|
|
1047
1096
|
else:
|
|
1048
1097
|
target_id = next(counter)
|
|
1049
1098
|
if variant.call_order > 1:
|
|
1050
|
-
targets.append(
|
|
1099
|
+
targets.append(
|
|
1100
|
+
StepInTarget(
|
|
1101
|
+
id=target_id,
|
|
1102
|
+
label="%s (call %s)" % (variant.name, variant.call_order),
|
|
1103
|
+
)
|
|
1104
|
+
)
|
|
1051
1105
|
else:
|
|
1052
1106
|
targets.append(StepInTarget(id=target_id, label=variant.name))
|
|
1053
1107
|
target_id_to_variant[target_id] = variant
|
|
@@ -1060,26 +1114,20 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se
|
|
|
1060
1114
|
info.target_id_to_smart_step_into_variant = target_id_to_variant
|
|
1061
1115
|
|
|
1062
1116
|
body = StepInTargetsResponseBody(targets=targets)
|
|
1063
|
-
response = pydevd_base_schema.build_response(request, kwargs={
|
|
1117
|
+
response = pydevd_base_schema.build_response(request, kwargs={"body": body})
|
|
1064
1118
|
cmd = NetCommand(CMD_RETURN, 0, response, is_json=True)
|
|
1065
1119
|
dbg.writer.add_command(cmd)
|
|
1066
1120
|
except Exception as e:
|
|
1067
1121
|
# Error is expected (if `dis` module cannot be used -- i.e.: Jython).
|
|
1068
|
-
pydev_log.exception(
|
|
1122
|
+
pydev_log.exception("Error calculating Smart Step Into Variants.")
|
|
1069
1123
|
body = StepInTargetsResponseBody([])
|
|
1070
|
-
variables_response = pydevd_base_schema.build_response(
|
|
1071
|
-
request,
|
|
1072
|
-
kwargs={
|
|
1073
|
-
'body': body,
|
|
1074
|
-
'success': False,
|
|
1075
|
-
'message': str(e)
|
|
1076
|
-
})
|
|
1124
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": str(e)})
|
|
1077
1125
|
cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True)
|
|
1078
1126
|
dbg.writer.add_command(cmd)
|
|
1079
1127
|
|
|
1080
1128
|
|
|
1081
1129
|
def internal_get_next_statement_targets(dbg, seq, thread_id, frame_id):
|
|
1082
|
-
|
|
1130
|
+
"""gets the valid line numbers for use with set next statement"""
|
|
1083
1131
|
try:
|
|
1084
1132
|
frame = dbg.find_frame(thread_id, frame_id)
|
|
1085
1133
|
if frame is not None:
|
|
@@ -1105,18 +1153,17 @@ def internal_get_next_statement_targets(dbg, seq, thread_id, frame_id):
|
|
|
1105
1153
|
dbg.writer.add_command(cmd)
|
|
1106
1154
|
|
|
1107
1155
|
|
|
1108
|
-
def _evaluate_response(py_db, request, result, error_message=
|
|
1156
|
+
def _evaluate_response(py_db, request, result, error_message=""):
|
|
1109
1157
|
is_error = isinstance(result, ExceptionOnEvaluate)
|
|
1110
1158
|
if is_error:
|
|
1111
1159
|
result = result.result
|
|
1112
1160
|
if not error_message:
|
|
1113
1161
|
body = pydevd_schema.EvaluateResponseBody(result=result, variablesReference=0)
|
|
1114
|
-
variables_response = pydevd_base_schema.build_response(request, kwargs={
|
|
1162
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
|
|
1115
1163
|
py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
|
|
1116
1164
|
else:
|
|
1117
1165
|
body = pydevd_schema.EvaluateResponseBody(result=result, variablesReference=0)
|
|
1118
|
-
variables_response = pydevd_base_schema.build_response(request, kwargs={
|
|
1119
|
-
'body':body, 'success':False, 'message': error_message})
|
|
1166
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": error_message})
|
|
1120
1167
|
py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
|
|
1121
1168
|
|
|
1122
1169
|
|
|
@@ -1124,9 +1171,9 @@ _global_frame = None
|
|
|
1124
1171
|
|
|
1125
1172
|
|
|
1126
1173
|
def internal_evaluate_expression_json(py_db, request, thread_id):
|
|
1127
|
-
|
|
1174
|
+
"""
|
|
1128
1175
|
:param EvaluateRequest request:
|
|
1129
|
-
|
|
1176
|
+
"""
|
|
1130
1177
|
global _global_frame
|
|
1131
1178
|
# : :type arguments: EvaluateArguments
|
|
1132
1179
|
|
|
@@ -1135,11 +1182,11 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
|
|
|
1135
1182
|
frame_id = arguments.frameId
|
|
1136
1183
|
context = arguments.context
|
|
1137
1184
|
fmt = arguments.format
|
|
1138
|
-
if hasattr(fmt,
|
|
1185
|
+
if hasattr(fmt, "to_dict"):
|
|
1139
1186
|
fmt = fmt.to_dict()
|
|
1140
1187
|
|
|
1141
1188
|
ctx = NULL
|
|
1142
|
-
if context ==
|
|
1189
|
+
if context == "repl":
|
|
1143
1190
|
if not py_db.is_output_redirected:
|
|
1144
1191
|
ctx = pydevd_io.redirect_stream_to_pydb_io_messages_context()
|
|
1145
1192
|
else:
|
|
@@ -1166,14 +1213,16 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
|
|
|
1166
1213
|
eval_result = pydevd_vars.evaluate_expression(py_db, frame, expression, is_exec=False)
|
|
1167
1214
|
is_error = isinstance_checked(eval_result, ExceptionOnEvaluate)
|
|
1168
1215
|
if is_error:
|
|
1169
|
-
if context ==
|
|
1170
|
-
_evaluate_response(py_db, request, result=
|
|
1216
|
+
if context == "hover": # In a hover it doesn't make sense to do an exec.
|
|
1217
|
+
_evaluate_response(py_db, request, result="", error_message="Exception occurred during evaluation.")
|
|
1171
1218
|
return
|
|
1172
|
-
elif context ==
|
|
1219
|
+
elif context == "watch":
|
|
1173
1220
|
# If it's a watch, don't show it as an exception object, rather, format
|
|
1174
1221
|
# it and show it as a string (with success=False).
|
|
1175
|
-
msg =
|
|
1176
|
-
eval_result.result.__class__.__name__,
|
|
1222
|
+
msg = "%s: %s" % (
|
|
1223
|
+
eval_result.result.__class__.__name__,
|
|
1224
|
+
eval_result.result,
|
|
1225
|
+
)
|
|
1177
1226
|
_evaluate_response(py_db, request, result=msg, error_message=msg)
|
|
1178
1227
|
return
|
|
1179
1228
|
else:
|
|
@@ -1182,10 +1231,10 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
|
|
|
1182
1231
|
try:
|
|
1183
1232
|
pydevd_vars.compile_as_eval(expression)
|
|
1184
1233
|
except Exception:
|
|
1185
|
-
try_exec = context ==
|
|
1234
|
+
try_exec = context == "repl"
|
|
1186
1235
|
else:
|
|
1187
1236
|
try_exec = False
|
|
1188
|
-
if context ==
|
|
1237
|
+
if context == "repl":
|
|
1189
1238
|
# In the repl we should show the exception to the user.
|
|
1190
1239
|
_evaluate_response_return_exception(py_db, request, eval_result.etype, eval_result.result, eval_result.tb)
|
|
1191
1240
|
return
|
|
@@ -1197,29 +1246,29 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
|
|
|
1197
1246
|
_evaluate_response_return_exception(py_db, request, *sys.exc_info())
|
|
1198
1247
|
return
|
|
1199
1248
|
# No result on exec.
|
|
1200
|
-
_evaluate_response(py_db, request, result=
|
|
1249
|
+
_evaluate_response(py_db, request, result="")
|
|
1201
1250
|
return
|
|
1202
1251
|
|
|
1203
1252
|
# Ok, we have the result (could be an error), let's put it into the saved variables.
|
|
1204
1253
|
frame_tracker = py_db.suspended_frames_manager.get_frame_tracker(thread_id)
|
|
1205
1254
|
if frame_tracker is None:
|
|
1206
1255
|
# This is not really expected.
|
|
1207
|
-
_evaluate_response(py_db, request, result=
|
|
1256
|
+
_evaluate_response(py_db, request, result="", error_message="Thread id: %s is not current thread id." % (thread_id,))
|
|
1208
1257
|
return
|
|
1209
1258
|
|
|
1210
1259
|
safe_repr_custom_attrs = {}
|
|
1211
|
-
if context ==
|
|
1260
|
+
if context == "clipboard":
|
|
1212
1261
|
safe_repr_custom_attrs = dict(
|
|
1213
|
-
maxstring_outer=2
|
|
1214
|
-
maxstring_inner=2
|
|
1215
|
-
maxother_outer=2
|
|
1216
|
-
maxother_inner=2
|
|
1262
|
+
maxstring_outer=2**64,
|
|
1263
|
+
maxstring_inner=2**64,
|
|
1264
|
+
maxother_outer=2**64,
|
|
1265
|
+
maxother_inner=2**64,
|
|
1217
1266
|
)
|
|
1218
1267
|
|
|
1219
|
-
if context ==
|
|
1268
|
+
if context == "repl" and eval_result is None:
|
|
1220
1269
|
# We don't want "None" to appear when typing in the repl.
|
|
1221
1270
|
body = pydevd_schema.EvaluateResponseBody(
|
|
1222
|
-
result=
|
|
1271
|
+
result="",
|
|
1223
1272
|
variablesReference=0,
|
|
1224
1273
|
)
|
|
1225
1274
|
|
|
@@ -1228,14 +1277,14 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
|
|
|
1228
1277
|
var_data = variable.get_var_data(fmt=fmt, context=context, **safe_repr_custom_attrs)
|
|
1229
1278
|
|
|
1230
1279
|
body = pydevd_schema.EvaluateResponseBody(
|
|
1231
|
-
result=var_data[
|
|
1232
|
-
variablesReference=var_data.get(
|
|
1233
|
-
type=var_data.get(
|
|
1234
|
-
presentationHint=var_data.get(
|
|
1235
|
-
namedVariables=var_data.get(
|
|
1236
|
-
indexedVariables=var_data.get(
|
|
1280
|
+
result=var_data["value"],
|
|
1281
|
+
variablesReference=var_data.get("variablesReference", 0),
|
|
1282
|
+
type=var_data.get("type"),
|
|
1283
|
+
presentationHint=var_data.get("presentationHint"),
|
|
1284
|
+
namedVariables=var_data.get("namedVariables"),
|
|
1285
|
+
indexedVariables=var_data.get("indexedVariables"),
|
|
1237
1286
|
)
|
|
1238
|
-
variables_response = pydevd_base_schema.build_response(request, kwargs={
|
|
1287
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
|
|
1239
1288
|
py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
|
|
1240
1289
|
|
|
1241
1290
|
|
|
@@ -1252,7 +1301,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t
|
|
|
1252
1301
|
|
|
1253
1302
|
if tb is None:
|
|
1254
1303
|
tb = initial_tb
|
|
1255
|
-
err =
|
|
1304
|
+
err = "".join(traceback.format_exception(exc_type, exc, tb))
|
|
1256
1305
|
|
|
1257
1306
|
# Make sure we don't keep references to them.
|
|
1258
1307
|
exc = None
|
|
@@ -1261,7 +1310,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t
|
|
|
1261
1310
|
temp_tb = None
|
|
1262
1311
|
initial_tb = None
|
|
1263
1312
|
except:
|
|
1264
|
-
err =
|
|
1313
|
+
err = "<Internal error - unable to get traceback when evaluating expression>"
|
|
1265
1314
|
pydev_log.exception(err)
|
|
1266
1315
|
|
|
1267
1316
|
# Currently there is an issue in VSC where returning success=false for an
|
|
@@ -1272,7 +1321,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t
|
|
|
1272
1321
|
|
|
1273
1322
|
@silence_warnings_decorator
|
|
1274
1323
|
def internal_evaluate_expression(dbg, seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result):
|
|
1275
|
-
|
|
1324
|
+
"""gets the value of a variable"""
|
|
1276
1325
|
try:
|
|
1277
1326
|
frame = dbg.find_frame(thread_id, frame_id)
|
|
1278
1327
|
if frame is not None:
|
|
@@ -1294,9 +1343,8 @@ def internal_evaluate_expression(dbg, seq, thread_id, frame_id, expression, is_e
|
|
|
1294
1343
|
|
|
1295
1344
|
|
|
1296
1345
|
def _set_expression_response(py_db, request, result, error_message):
|
|
1297
|
-
body = pydevd_schema.SetExpressionResponseBody(result=
|
|
1298
|
-
variables_response = pydevd_base_schema.build_response(request, kwargs={
|
|
1299
|
-
'body':body, 'success':False, 'message': error_message})
|
|
1346
|
+
body = pydevd_schema.SetExpressionResponseBody(result="", variablesReference=0)
|
|
1347
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": error_message})
|
|
1300
1348
|
py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
|
|
1301
1349
|
|
|
1302
1350
|
|
|
@@ -1308,23 +1356,23 @@ def internal_set_expression_json(py_db, request, thread_id):
|
|
|
1308
1356
|
frame_id = arguments.frameId
|
|
1309
1357
|
value = arguments.value
|
|
1310
1358
|
fmt = arguments.format
|
|
1311
|
-
if hasattr(fmt,
|
|
1359
|
+
if hasattr(fmt, "to_dict"):
|
|
1312
1360
|
fmt = fmt.to_dict()
|
|
1313
1361
|
|
|
1314
1362
|
frame = py_db.find_frame(thread_id, frame_id)
|
|
1315
|
-
exec_code =
|
|
1363
|
+
exec_code = "%s = (%s)" % (expression, value)
|
|
1316
1364
|
result = pydevd_vars.evaluate_expression(py_db, frame, exec_code, is_exec=True)
|
|
1317
1365
|
is_error = isinstance(result, ExceptionOnEvaluate)
|
|
1318
1366
|
|
|
1319
1367
|
if is_error:
|
|
1320
|
-
_set_expression_response(py_db, request, result, error_message=
|
|
1368
|
+
_set_expression_response(py_db, request, result, error_message="Error executing: %s" % (exec_code,))
|
|
1321
1369
|
return
|
|
1322
1370
|
|
|
1323
1371
|
# Ok, we have the result (could be an error), let's put it into the saved variables.
|
|
1324
1372
|
frame_tracker = py_db.suspended_frames_manager.get_frame_tracker(thread_id)
|
|
1325
1373
|
if frame_tracker is None:
|
|
1326
1374
|
# This is not really expected.
|
|
1327
|
-
_set_expression_response(py_db, request, result, error_message=
|
|
1375
|
+
_set_expression_response(py_db, request, result, error_message="Thread id: %s is not current thread id." % (thread_id,))
|
|
1328
1376
|
return
|
|
1329
1377
|
|
|
1330
1378
|
# Now that the exec is done, get the actual value changed to return.
|
|
@@ -1333,31 +1381,31 @@ def internal_set_expression_json(py_db, request, thread_id):
|
|
|
1333
1381
|
var_data = variable.get_var_data(fmt=fmt)
|
|
1334
1382
|
|
|
1335
1383
|
body = pydevd_schema.SetExpressionResponseBody(
|
|
1336
|
-
value=var_data[
|
|
1337
|
-
variablesReference=var_data.get(
|
|
1338
|
-
type=var_data.get(
|
|
1339
|
-
presentationHint=var_data.get(
|
|
1340
|
-
namedVariables=var_data.get(
|
|
1341
|
-
indexedVariables=var_data.get(
|
|
1384
|
+
value=var_data["value"],
|
|
1385
|
+
variablesReference=var_data.get("variablesReference", 0),
|
|
1386
|
+
type=var_data.get("type"),
|
|
1387
|
+
presentationHint=var_data.get("presentationHint"),
|
|
1388
|
+
namedVariables=var_data.get("namedVariables"),
|
|
1389
|
+
indexedVariables=var_data.get("indexedVariables"),
|
|
1342
1390
|
)
|
|
1343
|
-
variables_response = pydevd_base_schema.build_response(request, kwargs={
|
|
1391
|
+
variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
|
|
1344
1392
|
py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
|
|
1345
1393
|
|
|
1346
1394
|
|
|
1347
1395
|
def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, column=-1):
|
|
1348
|
-
|
|
1396
|
+
"""
|
|
1349
1397
|
Note that if the column is >= 0, the act_tok is considered text and the actual
|
|
1350
1398
|
activation token/qualifier is computed in this command.
|
|
1351
|
-
|
|
1399
|
+
"""
|
|
1352
1400
|
try:
|
|
1353
1401
|
remove_path = None
|
|
1354
1402
|
try:
|
|
1355
|
-
qualifier =
|
|
1403
|
+
qualifier = ""
|
|
1356
1404
|
if column >= 0:
|
|
1357
1405
|
token_and_qualifier = extract_token_and_qualifier(act_tok, line, column)
|
|
1358
1406
|
act_tok = token_and_qualifier[0]
|
|
1359
1407
|
if act_tok:
|
|
1360
|
-
act_tok +=
|
|
1408
|
+
act_tok += "."
|
|
1361
1409
|
qualifier = token_and_qualifier[1]
|
|
1362
1410
|
|
|
1363
1411
|
frame = dbg.find_frame(thread_id, frame_id)
|
|
@@ -1367,11 +1415,12 @@ def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, co
|
|
|
1367
1415
|
# Note that qualifier and start are only actually valid for the
|
|
1368
1416
|
# Debug Adapter Protocol (for the line-based protocol, the IDE
|
|
1369
1417
|
# is required to filter the completions returned).
|
|
1370
|
-
cmd = dbg.cmd_factory.make_get_completions_message(
|
|
1371
|
-
seq, completions, qualifier, start=column - len(qualifier))
|
|
1418
|
+
cmd = dbg.cmd_factory.make_get_completions_message(seq, completions, qualifier, start=column - len(qualifier))
|
|
1372
1419
|
dbg.writer.add_command(cmd)
|
|
1373
1420
|
else:
|
|
1374
|
-
cmd = dbg.cmd_factory.make_error_message(
|
|
1421
|
+
cmd = dbg.cmd_factory.make_error_message(
|
|
1422
|
+
seq, "internal_get_completions: Frame not found: %s from thread: %s" % (frame_id, thread_id)
|
|
1423
|
+
)
|
|
1375
1424
|
dbg.writer.add_command(cmd)
|
|
1376
1425
|
|
|
1377
1426
|
finally:
|
|
@@ -1380,18 +1429,17 @@ def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, co
|
|
|
1380
1429
|
|
|
1381
1430
|
except:
|
|
1382
1431
|
exc = get_exception_traceback_str()
|
|
1383
|
-
sys.stderr.write(
|
|
1432
|
+
sys.stderr.write("%s\n" % (exc,))
|
|
1384
1433
|
cmd = dbg.cmd_factory.make_error_message(seq, "Error evaluating expression " + exc)
|
|
1385
1434
|
dbg.writer.add_command(cmd)
|
|
1386
1435
|
|
|
1387
1436
|
|
|
1388
1437
|
def internal_get_description(dbg, seq, thread_id, frame_id, expression):
|
|
1389
|
-
|
|
1390
|
-
'''
|
|
1438
|
+
"""Fetch the variable description stub from the debug console"""
|
|
1391
1439
|
try:
|
|
1392
1440
|
frame = dbg.find_frame(thread_id, frame_id)
|
|
1393
1441
|
description = pydevd_console.get_description(frame, thread_id, frame_id, expression)
|
|
1394
|
-
description = pydevd_xml.make_valid_xml_value(quote(description,
|
|
1442
|
+
description = pydevd_xml.make_valid_xml_value(quote(description, "/>_= \t"))
|
|
1395
1443
|
description_xml = '<xml><var name="" type="" value="%s"/></xml>' % description
|
|
1396
1444
|
cmd = dbg.cmd_factory.make_get_description_message(seq, description_xml)
|
|
1397
1445
|
dbg.writer.add_command(cmd)
|
|
@@ -1402,15 +1450,15 @@ def internal_get_description(dbg, seq, thread_id, frame_id, expression):
|
|
|
1402
1450
|
|
|
1403
1451
|
|
|
1404
1452
|
def build_exception_info_response(dbg, thread_id, thread, request_seq, set_additional_thread_info, iter_visible_frames_info, max_frames):
|
|
1405
|
-
|
|
1453
|
+
"""
|
|
1406
1454
|
:return ExceptionInfoResponse
|
|
1407
|
-
|
|
1455
|
+
"""
|
|
1408
1456
|
additional_info = set_additional_thread_info(thread)
|
|
1409
1457
|
topmost_frame = additional_info.get_topmost_frame(thread)
|
|
1410
1458
|
|
|
1411
|
-
current_paused_frame_name =
|
|
1459
|
+
current_paused_frame_name = ""
|
|
1412
1460
|
|
|
1413
|
-
source_path =
|
|
1461
|
+
source_path = "" # This is an extra bit of data used by Visual Studio
|
|
1414
1462
|
stack_str_lst = []
|
|
1415
1463
|
name = None
|
|
1416
1464
|
description = None
|
|
@@ -1446,19 +1494,27 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
|
|
|
1446
1494
|
except:
|
|
1447
1495
|
pass
|
|
1448
1496
|
|
|
1449
|
-
for
|
|
1450
|
-
|
|
1451
|
-
|
|
1497
|
+
for (
|
|
1498
|
+
frame_id,
|
|
1499
|
+
frame,
|
|
1500
|
+
method_name,
|
|
1501
|
+
original_filename,
|
|
1502
|
+
filename_in_utf8,
|
|
1503
|
+
lineno,
|
|
1504
|
+
_applied_mapping,
|
|
1505
|
+
show_as_current_frame,
|
|
1506
|
+
line_col_info,
|
|
1507
|
+
) in iter_visible_frames_info(dbg, frames_list):
|
|
1452
1508
|
line_text = linecache.getline(original_filename, lineno)
|
|
1453
1509
|
|
|
1454
1510
|
# Never filter out plugin frames!
|
|
1455
|
-
if not getattr(frame,
|
|
1511
|
+
if not getattr(frame, "IS_PLUGIN_FRAME", False):
|
|
1456
1512
|
if dbg.is_files_filter_enabled and dbg.apply_files_filter(frame, original_filename, False):
|
|
1457
1513
|
continue
|
|
1458
1514
|
|
|
1459
1515
|
if show_as_current_frame:
|
|
1460
1516
|
current_paused_frame_name = method_name
|
|
1461
|
-
method_name +=
|
|
1517
|
+
method_name += " (Current frame)"
|
|
1462
1518
|
frames.append((filename_in_utf8, lineno, method_name, line_text, line_col_info))
|
|
1463
1519
|
|
|
1464
1520
|
if not source_path and frames:
|
|
@@ -1474,11 +1530,11 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
|
|
|
1474
1530
|
frame_summary.end_colno = line_col_info.end_colno
|
|
1475
1531
|
stack_summary.append(frame_summary)
|
|
1476
1532
|
|
|
1477
|
-
stack_str =
|
|
1533
|
+
stack_str = "".join(stack_summary.format())
|
|
1478
1534
|
|
|
1479
1535
|
else:
|
|
1480
1536
|
# Note: remove col info (just used in 3.11).
|
|
1481
|
-
stack_str =
|
|
1537
|
+
stack_str = "".join(traceback.format_list((x[:-1] for x in frames[-max_frames:])))
|
|
1482
1538
|
|
|
1483
1539
|
try:
|
|
1484
1540
|
stype = frames_list.exc_type.__qualname__
|
|
@@ -1486,12 +1542,12 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
|
|
|
1486
1542
|
if smod not in ("__main__", "builtins"):
|
|
1487
1543
|
if not isinstance(smod, str):
|
|
1488
1544
|
smod = "<unknown>"
|
|
1489
|
-
stype = smod +
|
|
1545
|
+
stype = smod + "." + stype
|
|
1490
1546
|
except Exception:
|
|
1491
|
-
stype =
|
|
1492
|
-
pydev_log.exception(
|
|
1547
|
+
stype = "<unable to get exception type>"
|
|
1548
|
+
pydev_log.exception("Error getting exception type.")
|
|
1493
1549
|
|
|
1494
|
-
stack_str +=
|
|
1550
|
+
stack_str += "%s: %s\n" % (stype, frames_list.exc_desc)
|
|
1495
1551
|
stack_str += frames_list.exc_context_msg
|
|
1496
1552
|
stack_str_lst.append(stack_str)
|
|
1497
1553
|
|
|
@@ -1500,18 +1556,18 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
|
|
|
1500
1556
|
break
|
|
1501
1557
|
|
|
1502
1558
|
except:
|
|
1503
|
-
pydev_log.exception(
|
|
1559
|
+
pydev_log.exception("Error on build_exception_info_response.")
|
|
1504
1560
|
finally:
|
|
1505
1561
|
topmost_frame = None
|
|
1506
|
-
full_stack_str =
|
|
1562
|
+
full_stack_str = "".join(reversed(stack_str_lst))
|
|
1507
1563
|
|
|
1508
1564
|
if not name:
|
|
1509
|
-
name =
|
|
1565
|
+
name = "exception: type unknown"
|
|
1510
1566
|
if not description:
|
|
1511
|
-
description =
|
|
1567
|
+
description = "exception: no description"
|
|
1512
1568
|
|
|
1513
1569
|
if current_paused_frame_name:
|
|
1514
|
-
name +=
|
|
1570
|
+
name += " (note: full exception trace is shown but execution is paused at: %s)" % (current_paused_frame_name,)
|
|
1515
1571
|
|
|
1516
1572
|
if thread.stop_reason == CMD_STEP_CAUGHT_EXCEPTION:
|
|
1517
1573
|
break_mode = pydevd_schema.ExceptionBreakMode.ALWAYS
|
|
@@ -1521,7 +1577,7 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
|
|
|
1521
1577
|
response = pydevd_schema.ExceptionInfoResponse(
|
|
1522
1578
|
request_seq=request_seq,
|
|
1523
1579
|
success=True,
|
|
1524
|
-
command=
|
|
1580
|
+
command="exceptionInfo",
|
|
1525
1581
|
body=pydevd_schema.ExceptionInfoResponseBody(
|
|
1526
1582
|
exceptionId=name,
|
|
1527
1583
|
description=description,
|
|
@@ -1533,29 +1589,28 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
|
|
|
1533
1589
|
source=source_path,
|
|
1534
1590
|
# Note: ExceptionDetails actually accepts an 'innerException', but
|
|
1535
1591
|
# when passing it, VSCode is not showing the stack trace at all.
|
|
1536
|
-
)
|
|
1537
|
-
)
|
|
1592
|
+
),
|
|
1593
|
+
),
|
|
1538
1594
|
)
|
|
1539
1595
|
return response
|
|
1540
1596
|
|
|
1541
1597
|
|
|
1542
|
-
def internal_get_exception_details_json(
|
|
1543
|
-
|
|
1544
|
-
|
|
1598
|
+
def internal_get_exception_details_json(
|
|
1599
|
+
dbg, request, thread_id, thread, max_frames, set_additional_thread_info=None, iter_visible_frames_info=None
|
|
1600
|
+
):
|
|
1601
|
+
"""Fetch exception details"""
|
|
1545
1602
|
try:
|
|
1546
|
-
response = build_exception_info_response(
|
|
1603
|
+
response = build_exception_info_response(
|
|
1604
|
+
dbg, thread_id, thread, request.seq, set_additional_thread_info, iter_visible_frames_info, max_frames
|
|
1605
|
+
)
|
|
1547
1606
|
except:
|
|
1548
1607
|
exc = get_exception_traceback_str()
|
|
1549
|
-
response = pydevd_base_schema.build_response(request, kwargs={
|
|
1550
|
-
'success': False,
|
|
1551
|
-
'message': exc,
|
|
1552
|
-
'body':{}
|
|
1553
|
-
})
|
|
1608
|
+
response = pydevd_base_schema.build_response(request, kwargs={"success": False, "message": exc, "body": {}})
|
|
1554
1609
|
dbg.writer.add_command(NetCommand(CMD_RETURN, 0, response, is_json=True))
|
|
1555
1610
|
|
|
1556
1611
|
|
|
1557
1612
|
class InternalGetBreakpointException(InternalThreadCommand):
|
|
1558
|
-
|
|
1613
|
+
"""Send details of exception raised while evaluating conditional breakpoint"""
|
|
1559
1614
|
|
|
1560
1615
|
def __init__(self, thread_id, exc_type, stacktrace):
|
|
1561
1616
|
self.sequence = 0
|
|
@@ -1575,27 +1630,31 @@ class InternalGetBreakpointException(InternalThreadCommand):
|
|
|
1575
1630
|
# convert it to utf8
|
|
1576
1631
|
filename = filename.decode(file_system_encoding).encode("utf-8")
|
|
1577
1632
|
|
|
1578
|
-
callstack += '<frame thread_id = "%s" file="%s" line="%s" name="%s" obj="%s" />'
|
|
1579
|
-
|
|
1633
|
+
callstack += '<frame thread_id = "%s" file="%s" line="%s" name="%s" obj="%s" />' % (
|
|
1634
|
+
self.thread_id,
|
|
1635
|
+
makeValid(filename),
|
|
1636
|
+
line,
|
|
1637
|
+
makeValid(methodname),
|
|
1638
|
+
makeValid(methodobj),
|
|
1639
|
+
)
|
|
1580
1640
|
callstack += "</xml>"
|
|
1581
1641
|
|
|
1582
1642
|
cmd = dbg.cmd_factory.make_send_breakpoint_exception_message(self.sequence, self.exc_type + "\t" + callstack)
|
|
1583
1643
|
dbg.writer.add_command(cmd)
|
|
1584
1644
|
except:
|
|
1585
1645
|
exc = get_exception_traceback_str()
|
|
1586
|
-
sys.stderr.write(
|
|
1646
|
+
sys.stderr.write("%s\n" % (exc,))
|
|
1587
1647
|
cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Exception: " + exc)
|
|
1588
1648
|
dbg.writer.add_command(cmd)
|
|
1589
1649
|
|
|
1590
1650
|
|
|
1591
1651
|
class InternalSendCurrExceptionTrace(InternalThreadCommand):
|
|
1592
|
-
|
|
1593
|
-
'''
|
|
1652
|
+
"""Send details of the exception that was caught and where we've broken in."""
|
|
1594
1653
|
|
|
1595
1654
|
def __init__(self, thread_id, arg, curr_frame_id):
|
|
1596
|
-
|
|
1655
|
+
"""
|
|
1597
1656
|
:param arg: exception type, description, traceback object
|
|
1598
|
-
|
|
1657
|
+
"""
|
|
1599
1658
|
self.sequence = 0
|
|
1600
1659
|
self.thread_id = thread_id
|
|
1601
1660
|
self.curr_frame_id = curr_frame_id
|
|
@@ -1608,14 +1667,13 @@ class InternalSendCurrExceptionTrace(InternalThreadCommand):
|
|
|
1608
1667
|
dbg.writer.add_command(cmd)
|
|
1609
1668
|
except:
|
|
1610
1669
|
exc = get_exception_traceback_str()
|
|
1611
|
-
sys.stderr.write(
|
|
1670
|
+
sys.stderr.write("%s\n" % (exc,))
|
|
1612
1671
|
cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Current Exception Trace: " + exc)
|
|
1613
1672
|
dbg.writer.add_command(cmd)
|
|
1614
1673
|
|
|
1615
1674
|
|
|
1616
1675
|
class InternalSendCurrExceptionTraceProceeded(InternalThreadCommand):
|
|
1617
|
-
|
|
1618
|
-
'''
|
|
1676
|
+
"""Send details of the exception that was caught and where we've broken in."""
|
|
1619
1677
|
|
|
1620
1678
|
def __init__(self, thread_id):
|
|
1621
1679
|
self.sequence = 0
|
|
@@ -1627,13 +1685,13 @@ class InternalSendCurrExceptionTraceProceeded(InternalThreadCommand):
|
|
|
1627
1685
|
dbg.writer.add_command(cmd)
|
|
1628
1686
|
except:
|
|
1629
1687
|
exc = get_exception_traceback_str()
|
|
1630
|
-
sys.stderr.write(
|
|
1688
|
+
sys.stderr.write("%s\n" % (exc,))
|
|
1631
1689
|
cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Current Exception Trace Proceeded: " + exc)
|
|
1632
1690
|
dbg.writer.add_command(cmd)
|
|
1633
1691
|
|
|
1634
1692
|
|
|
1635
1693
|
class InternalEvaluateConsoleExpression(InternalThreadCommand):
|
|
1636
|
-
|
|
1694
|
+
"""Execute the given command in the debug console"""
|
|
1637
1695
|
|
|
1638
1696
|
def __init__(self, seq, thread_id, frame_id, line, buffer_output=True):
|
|
1639
1697
|
self.sequence = seq
|
|
@@ -1643,22 +1701,24 @@ class InternalEvaluateConsoleExpression(InternalThreadCommand):
|
|
|
1643
1701
|
self.buffer_output = buffer_output
|
|
1644
1702
|
|
|
1645
1703
|
def do_it(self, dbg):
|
|
1646
|
-
|
|
1704
|
+
"""Create an XML for console output, error and more (true/false)
|
|
1647
1705
|
<xml>
|
|
1648
1706
|
<output message=output_message></output>
|
|
1649
1707
|
<error message=error_message></error>
|
|
1650
1708
|
<more>true/false</more>
|
|
1651
1709
|
</xml>
|
|
1652
|
-
|
|
1710
|
+
"""
|
|
1653
1711
|
try:
|
|
1654
1712
|
frame = dbg.find_frame(self.thread_id, self.frame_id)
|
|
1655
1713
|
if frame is not None:
|
|
1656
1714
|
console_message = pydevd_console.execute_console_command(
|
|
1657
|
-
frame, self.thread_id, self.frame_id, self.line, self.buffer_output
|
|
1715
|
+
frame, self.thread_id, self.frame_id, self.line, self.buffer_output
|
|
1716
|
+
)
|
|
1658
1717
|
|
|
1659
1718
|
cmd = dbg.cmd_factory.make_send_console_message(self.sequence, console_message.to_xml())
|
|
1660
1719
|
else:
|
|
1661
1720
|
from _pydevd_bundle.pydevd_console import ConsoleMessage
|
|
1721
|
+
|
|
1662
1722
|
console_message = ConsoleMessage()
|
|
1663
1723
|
console_message.add_console_message(
|
|
1664
1724
|
pydevd_console.CONSOLE_ERROR,
|
|
@@ -1672,8 +1732,7 @@ class InternalEvaluateConsoleExpression(InternalThreadCommand):
|
|
|
1672
1732
|
|
|
1673
1733
|
|
|
1674
1734
|
class InternalRunCustomOperation(InternalThreadCommand):
|
|
1675
|
-
|
|
1676
|
-
'''
|
|
1735
|
+
"""Run a custom command on an expression"""
|
|
1677
1736
|
|
|
1678
1737
|
def __init__(self, seq, thread_id, frame_id, scope, attrs, style, encoded_code_or_file, fnname):
|
|
1679
1738
|
self.sequence = seq
|
|
@@ -1687,8 +1746,9 @@ class InternalRunCustomOperation(InternalThreadCommand):
|
|
|
1687
1746
|
|
|
1688
1747
|
def do_it(self, dbg):
|
|
1689
1748
|
try:
|
|
1690
|
-
res = pydevd_vars.custom_operation(
|
|
1691
|
-
|
|
1749
|
+
res = pydevd_vars.custom_operation(
|
|
1750
|
+
dbg, self.thread_id, self.frame_id, self.scope, self.attrs, self.style, self.code_or_file, self.fnname
|
|
1751
|
+
)
|
|
1692
1752
|
resEncoded = quote_plus(res)
|
|
1693
1753
|
cmd = dbg.cmd_factory.make_custom_operation_message(self.sequence, resEncoded)
|
|
1694
1754
|
dbg.writer.add_command(cmd)
|
|
@@ -1699,8 +1759,7 @@ class InternalRunCustomOperation(InternalThreadCommand):
|
|
|
1699
1759
|
|
|
1700
1760
|
|
|
1701
1761
|
class InternalConsoleGetCompletions(InternalThreadCommand):
|
|
1702
|
-
|
|
1703
|
-
'''
|
|
1762
|
+
"""Fetch the completions in the debug console"""
|
|
1704
1763
|
|
|
1705
1764
|
def __init__(self, seq, thread_id, frame_id, act_tok):
|
|
1706
1765
|
self.sequence = seq
|
|
@@ -1709,8 +1768,7 @@ class InternalConsoleGetCompletions(InternalThreadCommand):
|
|
|
1709
1768
|
self.act_tok = act_tok
|
|
1710
1769
|
|
|
1711
1770
|
def do_it(self, dbg):
|
|
1712
|
-
|
|
1713
|
-
'''
|
|
1771
|
+
"""Get completions and write back to the client"""
|
|
1714
1772
|
try:
|
|
1715
1773
|
frame = dbg.find_frame(self.thread_id, self.frame_id)
|
|
1716
1774
|
completions_xml = pydevd_console.get_completions(frame, self.act_tok)
|
|
@@ -1723,7 +1781,7 @@ class InternalConsoleGetCompletions(InternalThreadCommand):
|
|
|
1723
1781
|
|
|
1724
1782
|
|
|
1725
1783
|
class InternalConsoleExec(InternalThreadCommand):
|
|
1726
|
-
|
|
1784
|
+
"""gets the value of a variable"""
|
|
1727
1785
|
|
|
1728
1786
|
def __init__(self, seq, thread_id, frame_id, expression):
|
|
1729
1787
|
self.sequence = seq
|
|
@@ -1731,24 +1789,40 @@ class InternalConsoleExec(InternalThreadCommand):
|
|
|
1731
1789
|
self.frame_id = frame_id
|
|
1732
1790
|
self.expression = expression
|
|
1733
1791
|
|
|
1734
|
-
def
|
|
1735
|
-
|
|
1792
|
+
def init_matplotlib_in_debug_console(self, py_db):
|
|
1793
|
+
# import hook and patches for matplotlib support in debug console
|
|
1794
|
+
from _pydev_bundle.pydev_import_hook import import_hook_manager
|
|
1795
|
+
|
|
1796
|
+
if is_current_thread_main_thread():
|
|
1797
|
+
for module in list(py_db.mpl_modules_for_patching):
|
|
1798
|
+
import_hook_manager.add_module_name(module, py_db.mpl_modules_for_patching.pop(module))
|
|
1799
|
+
|
|
1800
|
+
def do_it(self, py_db):
|
|
1801
|
+
if not py_db.mpl_hooks_in_debug_console and not py_db.gui_in_use:
|
|
1802
|
+
# add import hooks for matplotlib patches if only debug console was started
|
|
1803
|
+
try:
|
|
1804
|
+
self.init_matplotlib_in_debug_console(py_db)
|
|
1805
|
+
py_db.gui_in_use = True
|
|
1806
|
+
except:
|
|
1807
|
+
pydev_log.debug("Matplotlib support in debug console failed", traceback.format_exc())
|
|
1808
|
+
py_db.mpl_hooks_in_debug_console = True
|
|
1809
|
+
|
|
1736
1810
|
try:
|
|
1737
1811
|
try:
|
|
1738
|
-
#
|
|
1812
|
+
# Don't trace new threads created by console command.
|
|
1739
1813
|
disable_trace_thread_modules()
|
|
1740
1814
|
|
|
1741
|
-
result = pydevconsole.console_exec(self.thread_id, self.frame_id, self.expression,
|
|
1815
|
+
result = pydevconsole.console_exec(self.thread_id, self.frame_id, self.expression, py_db)
|
|
1742
1816
|
xml = "<xml>"
|
|
1743
1817
|
xml += pydevd_xml.var_to_xml(result, "")
|
|
1744
1818
|
xml += "</xml>"
|
|
1745
|
-
cmd =
|
|
1746
|
-
|
|
1819
|
+
cmd = py_db.cmd_factory.make_evaluate_expression_message(self.sequence, xml)
|
|
1820
|
+
py_db.writer.add_command(cmd)
|
|
1747
1821
|
except:
|
|
1748
1822
|
exc = get_exception_traceback_str()
|
|
1749
|
-
sys.stderr.write(
|
|
1750
|
-
cmd =
|
|
1751
|
-
|
|
1823
|
+
sys.stderr.write("%s\n" % (exc,))
|
|
1824
|
+
cmd = py_db.cmd_factory.make_error_message(self.sequence, "Error evaluating console expression " + exc)
|
|
1825
|
+
py_db.writer.add_command(cmd)
|
|
1752
1826
|
finally:
|
|
1753
1827
|
enable_trace_thread_modules()
|
|
1754
1828
|
|
|
@@ -1757,9 +1831,9 @@ class InternalConsoleExec(InternalThreadCommand):
|
|
|
1757
1831
|
|
|
1758
1832
|
|
|
1759
1833
|
class InternalLoadFullValue(InternalThreadCommand):
|
|
1760
|
-
|
|
1834
|
+
"""
|
|
1761
1835
|
Loads values asynchronously
|
|
1762
|
-
|
|
1836
|
+
"""
|
|
1763
1837
|
|
|
1764
1838
|
def __init__(self, seq, thread_id, frame_id, vars):
|
|
1765
1839
|
self.sequence = seq
|
|
@@ -1769,14 +1843,14 @@ class InternalLoadFullValue(InternalThreadCommand):
|
|
|
1769
1843
|
|
|
1770
1844
|
@silence_warnings_decorator
|
|
1771
1845
|
def do_it(self, dbg):
|
|
1772
|
-
|
|
1846
|
+
"""Starts a thread that will load values asynchronously"""
|
|
1773
1847
|
try:
|
|
1774
1848
|
var_objects = []
|
|
1775
1849
|
for variable in self.vars:
|
|
1776
1850
|
variable = variable.strip()
|
|
1777
1851
|
if len(variable) > 0:
|
|
1778
|
-
if
|
|
1779
|
-
scope, attrs = variable.split(
|
|
1852
|
+
if "\t" in variable: # there are attributes beyond scope
|
|
1853
|
+
scope, attrs = variable.split("\t", 1)
|
|
1780
1854
|
name = attrs[0]
|
|
1781
1855
|
else:
|
|
1782
1856
|
scope, attrs = (variable, None)
|
|
@@ -1788,22 +1862,22 @@ class InternalLoadFullValue(InternalThreadCommand):
|
|
|
1788
1862
|
t.start()
|
|
1789
1863
|
except:
|
|
1790
1864
|
exc = get_exception_traceback_str()
|
|
1791
|
-
sys.stderr.write(
|
|
1865
|
+
sys.stderr.write("%s\n" % (exc,))
|
|
1792
1866
|
cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error evaluating variable %s " % exc)
|
|
1793
1867
|
dbg.writer.add_command(cmd)
|
|
1794
1868
|
|
|
1795
1869
|
|
|
1796
1870
|
class AbstractGetValueAsyncThread(PyDBDaemonThread):
|
|
1797
|
-
|
|
1871
|
+
"""
|
|
1798
1872
|
Abstract class for a thread, which evaluates values for async variables
|
|
1799
|
-
|
|
1873
|
+
"""
|
|
1800
1874
|
|
|
1801
1875
|
def __init__(self, py_db, frame_accessor, seq, var_objects):
|
|
1802
1876
|
PyDBDaemonThread.__init__(self, py_db)
|
|
1803
1877
|
self.frame_accessor = frame_accessor
|
|
1804
1878
|
self.seq = seq
|
|
1805
1879
|
self.var_objs = var_objects
|
|
1806
|
-
self.cancel_event =
|
|
1880
|
+
self.cancel_event = ThreadingEvent()
|
|
1807
1881
|
|
|
1808
1882
|
def send_result(self, xml):
|
|
1809
1883
|
raise NotImplementedError()
|
|
@@ -1813,7 +1887,7 @@ class AbstractGetValueAsyncThread(PyDBDaemonThread):
|
|
|
1813
1887
|
start = time.time()
|
|
1814
1888
|
xml = StringIO()
|
|
1815
1889
|
xml.write("<xml>")
|
|
1816
|
-
for
|
|
1890
|
+
for var_obj, name in self.var_objs:
|
|
1817
1891
|
current_time = time.time()
|
|
1818
1892
|
if current_time - start > ASYNC_EVAL_TIMEOUT_SEC or self.cancel_event.is_set():
|
|
1819
1893
|
break
|
|
@@ -1824,10 +1898,10 @@ class AbstractGetValueAsyncThread(PyDBDaemonThread):
|
|
|
1824
1898
|
|
|
1825
1899
|
|
|
1826
1900
|
class GetValueAsyncThreadDebug(AbstractGetValueAsyncThread):
|
|
1827
|
-
|
|
1901
|
+
"""
|
|
1828
1902
|
A thread for evaluation async values, which returns result for debugger
|
|
1829
1903
|
Create message and send it via writer thread
|
|
1830
|
-
|
|
1904
|
+
"""
|
|
1831
1905
|
|
|
1832
1906
|
def send_result(self, xml):
|
|
1833
1907
|
if self.frame_accessor is not None:
|
|
@@ -1836,12 +1910,11 @@ class GetValueAsyncThreadDebug(AbstractGetValueAsyncThread):
|
|
|
1836
1910
|
|
|
1837
1911
|
|
|
1838
1912
|
class GetValueAsyncThreadConsole(AbstractGetValueAsyncThread):
|
|
1839
|
-
|
|
1913
|
+
"""
|
|
1840
1914
|
A thread for evaluation async values, which returns result for Console
|
|
1841
1915
|
Send result directly to Console's server
|
|
1842
|
-
|
|
1916
|
+
"""
|
|
1843
1917
|
|
|
1844
1918
|
def send_result(self, xml):
|
|
1845
1919
|
if self.frame_accessor is not None:
|
|
1846
1920
|
self.frame_accessor.ReturnFullValue(self.seq, xml.getvalue())
|
|
1847
|
-
|