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
|
-
r
|
|
1
|
+
r"""
|
|
2
2
|
Copyright: Brainwy Software Ltda.
|
|
3
3
|
|
|
4
4
|
License: EPL.
|
|
@@ -64,7 +64,7 @@ Other references:
|
|
|
64
64
|
To build the dlls needed on windows, visual studio express 13 was used (see compile_dll.bat)
|
|
65
65
|
|
|
66
66
|
See: attach_pydevd.py to attach the pydev debugger to a running python process.
|
|
67
|
-
|
|
67
|
+
"""
|
|
68
68
|
|
|
69
69
|
# Note: to work with nasm compiling asm to code and decompiling to see asm with shellcode:
|
|
70
70
|
# x:\nasm\nasm-2.07-win32\nasm-2.07\nasm.exe
|
|
@@ -94,17 +94,16 @@ def _create_win_event(name):
|
|
|
94
94
|
manual_reset = False # i.e.: after someone waits it, automatically set to False.
|
|
95
95
|
initial_state = False
|
|
96
96
|
if not isinstance(name, bytes):
|
|
97
|
-
name = name.encode(
|
|
97
|
+
name = name.encode("utf-8")
|
|
98
98
|
event = CreateEventA(None, manual_reset, initial_state, name)
|
|
99
99
|
if not event:
|
|
100
100
|
raise ctypes.WinError()
|
|
101
101
|
|
|
102
102
|
class _WinEvent(object):
|
|
103
|
-
|
|
104
103
|
def wait_for_event_set(self, timeout=None):
|
|
105
|
-
|
|
104
|
+
"""
|
|
106
105
|
:param timeout: in seconds
|
|
107
|
-
|
|
106
|
+
"""
|
|
108
107
|
if timeout is None:
|
|
109
108
|
timeout = 0xFFFFFFFF
|
|
110
109
|
else:
|
|
@@ -124,13 +123,13 @@ def _create_win_event(name):
|
|
|
124
123
|
CloseHandle(event)
|
|
125
124
|
|
|
126
125
|
|
|
127
|
-
IS_WINDOWS = sys.platform ==
|
|
128
|
-
IS_LINUX = sys.platform in (
|
|
129
|
-
IS_MAC = sys.platform ==
|
|
126
|
+
IS_WINDOWS = sys.platform == "win32"
|
|
127
|
+
IS_LINUX = sys.platform in ("linux", "linux2")
|
|
128
|
+
IS_MAC = sys.platform == "darwin"
|
|
130
129
|
|
|
131
130
|
|
|
132
131
|
def is_python_64bit():
|
|
133
|
-
return
|
|
132
|
+
return struct.calcsize("P") == 8
|
|
134
133
|
|
|
135
134
|
|
|
136
135
|
def get_target_filename(is_target_process_64=None, prefix=None, extension=None):
|
|
@@ -140,7 +139,7 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None):
|
|
|
140
139
|
# debugger -- the only situation where it's imported is if the user actually does an attach to
|
|
141
140
|
# process, through `attach_pydevd.py`, but this should usually be called from the IDE directly
|
|
142
141
|
# and not from the debugger).
|
|
143
|
-
libdir = os.path.dirname(__file__)
|
|
142
|
+
libdir = os.path.dirname(os.path.abspath(__file__))
|
|
144
143
|
|
|
145
144
|
if is_target_process_64 is None:
|
|
146
145
|
if IS_WINDOWS:
|
|
@@ -150,41 +149,41 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None):
|
|
|
150
149
|
# For other platforms, just use the the same bitness of the process we're running in.
|
|
151
150
|
is_target_process_64 = is_python_64bit()
|
|
152
151
|
|
|
153
|
-
arch =
|
|
152
|
+
arch = ""
|
|
154
153
|
if IS_WINDOWS:
|
|
155
154
|
# prefer not using platform.machine() when possible (it's a bit heavyweight as it may
|
|
156
155
|
# spawn a subprocess).
|
|
157
|
-
arch = os.environ.get("PROCESSOR_ARCHITEW6432", os.environ.get(
|
|
156
|
+
arch = os.environ.get("PROCESSOR_ARCHITEW6432", os.environ.get("PROCESSOR_ARCHITECTURE", ""))
|
|
158
157
|
|
|
159
158
|
if not arch:
|
|
160
159
|
arch = platform.machine()
|
|
161
160
|
if not arch:
|
|
162
|
-
print(
|
|
161
|
+
print("platform.machine() did not return valid value.") # This shouldn't happen...
|
|
163
162
|
return None
|
|
164
163
|
|
|
165
164
|
if IS_WINDOWS:
|
|
166
165
|
if not extension:
|
|
167
|
-
extension =
|
|
168
|
-
suffix_64 =
|
|
169
|
-
suffix_32 =
|
|
166
|
+
extension = ".dll"
|
|
167
|
+
suffix_64 = "amd64"
|
|
168
|
+
suffix_32 = "x86"
|
|
170
169
|
|
|
171
170
|
elif IS_LINUX:
|
|
172
171
|
if not extension:
|
|
173
|
-
extension =
|
|
174
|
-
suffix_64 =
|
|
175
|
-
suffix_32 =
|
|
172
|
+
extension = ".so"
|
|
173
|
+
suffix_64 = "amd64"
|
|
174
|
+
suffix_32 = "x86"
|
|
176
175
|
|
|
177
176
|
elif IS_MAC:
|
|
178
177
|
if not extension:
|
|
179
|
-
extension =
|
|
180
|
-
suffix_64 =
|
|
181
|
-
suffix_32 =
|
|
178
|
+
extension = ".dylib"
|
|
179
|
+
suffix_64 = "x86_64"
|
|
180
|
+
suffix_32 = "x86"
|
|
182
181
|
|
|
183
182
|
else:
|
|
184
|
-
print(
|
|
183
|
+
print("Unable to attach to process in platform: %s", sys.platform)
|
|
185
184
|
return None
|
|
186
185
|
|
|
187
|
-
if arch.lower() not in (
|
|
186
|
+
if arch.lower() not in ("amd64", "x86", "x86_64", "i386", "x86"):
|
|
188
187
|
# We don't support this processor by default. Still, let's support the case where the
|
|
189
188
|
# user manually compiled it himself with some heuristics.
|
|
190
189
|
#
|
|
@@ -195,19 +194,19 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None):
|
|
|
195
194
|
# - linux_and_mac/compile_mac.sh
|
|
196
195
|
|
|
197
196
|
try:
|
|
198
|
-
found = [name for name in os.listdir(libdir) if name.startswith(
|
|
197
|
+
found = [name for name in os.listdir(libdir) if name.startswith("attach_") and name.endswith(extension)]
|
|
199
198
|
except:
|
|
200
|
-
print(
|
|
199
|
+
print("Error listing dir: %s" % (libdir,))
|
|
201
200
|
traceback.print_exc()
|
|
202
201
|
return None
|
|
203
202
|
|
|
204
203
|
if prefix:
|
|
205
204
|
expected_name = prefix + arch + extension
|
|
206
|
-
expected_name_linux = prefix +
|
|
205
|
+
expected_name_linux = prefix + "linux_" + arch + extension
|
|
207
206
|
else:
|
|
208
207
|
# Default is looking for the attach_ / attach_linux
|
|
209
|
-
expected_name =
|
|
210
|
-
expected_name_linux =
|
|
208
|
+
expected_name = "attach_" + arch + extension
|
|
209
|
+
expected_name_linux = "attach_linux_" + arch + extension
|
|
211
210
|
|
|
212
211
|
filename = None
|
|
213
212
|
if expected_name in found: # Heuristic: user compiled with "attach_<arch>.<extension>"
|
|
@@ -225,14 +224,10 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None):
|
|
|
225
224
|
filename = os.path.join(libdir, found[0])
|
|
226
225
|
|
|
227
226
|
if filename is None:
|
|
228
|
-
print(
|
|
229
|
-
'Unable to attach to process in arch: %s (did not find %s in %s).' % (
|
|
230
|
-
arch, expected_name, libdir
|
|
231
|
-
)
|
|
232
|
-
)
|
|
227
|
+
print("Unable to attach to process in arch: %s (did not find %s in %s)." % (arch, expected_name, libdir))
|
|
233
228
|
return None
|
|
234
229
|
|
|
235
|
-
print(
|
|
230
|
+
print("Using %s in arch: %s." % (filename, arch))
|
|
236
231
|
|
|
237
232
|
else:
|
|
238
233
|
if is_target_process_64:
|
|
@@ -243,33 +238,34 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None):
|
|
|
243
238
|
if not prefix:
|
|
244
239
|
# Default is looking for the attach_ / attach_linux
|
|
245
240
|
if IS_WINDOWS or IS_MAC: # just the extension changes
|
|
246
|
-
prefix =
|
|
241
|
+
prefix = "attach_"
|
|
247
242
|
elif IS_LINUX:
|
|
248
|
-
prefix =
|
|
243
|
+
prefix = "attach_linux_" # historically it has a different name
|
|
249
244
|
else:
|
|
250
|
-
print(
|
|
245
|
+
print("Unable to attach to process in platform: %s" % (sys.platform,))
|
|
251
246
|
return None
|
|
252
247
|
|
|
253
|
-
filename = os.path.join(libdir,
|
|
248
|
+
filename = os.path.join(libdir, "%s%s%s" % (prefix, suffix, extension))
|
|
254
249
|
|
|
255
250
|
if not os.path.exists(filename):
|
|
256
|
-
print(
|
|
251
|
+
print("Expected: %s to exist." % (filename,))
|
|
257
252
|
return None
|
|
258
253
|
|
|
259
254
|
return filename
|
|
260
255
|
|
|
261
256
|
|
|
262
257
|
def run_python_code_windows(pid, python_code, connect_debugger_tracing=False, show_debug_info=0):
|
|
263
|
-
assert '
|
|
258
|
+
assert "'" not in python_code, "Having a single quote messes with our command."
|
|
264
259
|
|
|
265
260
|
# Suppress winappdbg warning about sql package missing.
|
|
266
261
|
import warnings
|
|
262
|
+
|
|
267
263
|
with warnings.catch_warnings():
|
|
268
264
|
warnings.simplefilter("ignore", category=ImportWarning)
|
|
269
265
|
from winappdbg.process import Process
|
|
270
266
|
|
|
271
267
|
if not isinstance(python_code, bytes):
|
|
272
|
-
python_code = python_code.encode(
|
|
268
|
+
python_code = python_code.encode("utf-8")
|
|
273
269
|
|
|
274
270
|
process = Process(pid)
|
|
275
271
|
bits = process.get_bits()
|
|
@@ -282,41 +278,40 @@ def run_python_code_windows(pid, python_code, connect_debugger_tracing=False, sh
|
|
|
282
278
|
# "Target 64 bits: %s\n"
|
|
283
279
|
# "Current Python 64 bits: %s" % (is_target_process_64, is_python_64bit()))
|
|
284
280
|
|
|
285
|
-
with _acquire_mutex(
|
|
286
|
-
print(
|
|
281
|
+
with _acquire_mutex("_pydevd_pid_attach_mutex_%s" % (pid,), 10):
|
|
282
|
+
print("--- Connecting to %s bits target (current process is: %s) ---" % (bits, 64 if is_python_64bit() else 32))
|
|
287
283
|
sys.stdout.flush()
|
|
288
284
|
|
|
289
285
|
with _win_write_to_shared_named_memory(python_code, pid):
|
|
290
|
-
|
|
291
|
-
target_executable = get_target_filename(is_target_process_64, 'inject_dll_', '.exe')
|
|
286
|
+
target_executable = get_target_filename(is_target_process_64, "inject_dll_", ".exe")
|
|
292
287
|
if not target_executable:
|
|
293
|
-
raise RuntimeError(
|
|
288
|
+
raise RuntimeError("Could not find expected .exe file to inject dll in attach to process.")
|
|
294
289
|
|
|
295
290
|
target_dll = get_target_filename(is_target_process_64)
|
|
296
291
|
if not target_dll:
|
|
297
|
-
raise RuntimeError(
|
|
292
|
+
raise RuntimeError("Could not find expected .dll file in attach to process.")
|
|
298
293
|
|
|
299
|
-
print(
|
|
294
|
+
print("\n--- Injecting attach dll: %s into pid: %s ---" % (os.path.basename(target_dll), pid))
|
|
300
295
|
sys.stdout.flush()
|
|
301
296
|
args = [target_executable, str(pid), target_dll]
|
|
302
297
|
subprocess.check_call(args)
|
|
303
298
|
|
|
304
299
|
# Now, if the first injection worked, go on to the second which will actually
|
|
305
300
|
# run the code.
|
|
306
|
-
target_dll_run_on_dllmain = get_target_filename(is_target_process_64,
|
|
301
|
+
target_dll_run_on_dllmain = get_target_filename(is_target_process_64, "run_code_on_dllmain_", ".dll")
|
|
307
302
|
if not target_dll_run_on_dllmain:
|
|
308
|
-
raise RuntimeError(
|
|
303
|
+
raise RuntimeError("Could not find expected .dll in attach to process.")
|
|
309
304
|
|
|
310
|
-
with _create_win_event(
|
|
311
|
-
print(
|
|
305
|
+
with _create_win_event("_pydevd_pid_event_%s" % (pid,)) as event:
|
|
306
|
+
print("\n--- Injecting run code dll: %s into pid: %s ---" % (os.path.basename(target_dll_run_on_dllmain), pid))
|
|
312
307
|
sys.stdout.flush()
|
|
313
308
|
args = [target_executable, str(pid), target_dll_run_on_dllmain]
|
|
314
309
|
subprocess.check_call(args)
|
|
315
310
|
|
|
316
|
-
if not event.wait_for_event_set(
|
|
317
|
-
print(
|
|
311
|
+
if not event.wait_for_event_set(30):
|
|
312
|
+
print("Timeout error: the attach may not have completed.")
|
|
318
313
|
sys.stdout.flush()
|
|
319
|
-
print(
|
|
314
|
+
print("--- Finished dll injection ---\n")
|
|
320
315
|
sys.stdout.flush()
|
|
321
316
|
|
|
322
317
|
return 0
|
|
@@ -324,10 +319,10 @@ def run_python_code_windows(pid, python_code, connect_debugger_tracing=False, sh
|
|
|
324
319
|
|
|
325
320
|
@contextmanager
|
|
326
321
|
def _acquire_mutex(mutex_name, timeout):
|
|
327
|
-
|
|
322
|
+
"""
|
|
328
323
|
Only one process may be attaching to a pid, so, create a system mutex
|
|
329
324
|
to make sure this holds in practice.
|
|
330
|
-
|
|
325
|
+
"""
|
|
331
326
|
from winappdbg.win32.kernel32 import CreateMutex, GetLastError, CloseHandle
|
|
332
327
|
from winappdbg.win32.defines import ERROR_ALREADY_EXISTS
|
|
333
328
|
|
|
@@ -338,8 +333,8 @@ def _acquire_mutex(mutex_name, timeout):
|
|
|
338
333
|
if acquired:
|
|
339
334
|
break
|
|
340
335
|
if time.time() - initial_time > timeout:
|
|
341
|
-
raise TimeoutError(
|
|
342
|
-
time.sleep(.2)
|
|
336
|
+
raise TimeoutError("Unable to acquire mutex to make attach before timeout.")
|
|
337
|
+
time.sleep(0.2)
|
|
343
338
|
|
|
344
339
|
try:
|
|
345
340
|
yield
|
|
@@ -369,18 +364,17 @@ def _win_write_to_shared_named_memory(python_code, pid):
|
|
|
369
364
|
# Note: BUFSIZE must be the same from run_code_in_memory.hpp
|
|
370
365
|
BUFSIZE = 2048
|
|
371
366
|
assert isinstance(python_code, bytes)
|
|
372
|
-
assert len(python_code) > 0,
|
|
367
|
+
assert len(python_code) > 0, "Python code must not be empty."
|
|
373
368
|
# Note: -1 so that we're sure we'll add a \0 to the end.
|
|
374
|
-
assert len(python_code) < BUFSIZE - 1,
|
|
369
|
+
assert len(python_code) < BUFSIZE - 1, "Python code must have at most %s bytes (found: %s)" % (BUFSIZE - 1, len(python_code))
|
|
375
370
|
|
|
376
|
-
python_code += b
|
|
377
|
-
assert python_code.endswith(b
|
|
371
|
+
python_code += b"\0" * (BUFSIZE - len(python_code))
|
|
372
|
+
assert python_code.endswith(b"\0")
|
|
378
373
|
|
|
379
374
|
INVALID_HANDLE_VALUE = -1
|
|
380
375
|
PAGE_READWRITE = 0x4
|
|
381
376
|
FILE_MAP_WRITE = 0x2
|
|
382
|
-
filemap = CreateFileMapping(
|
|
383
|
-
INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, BUFSIZE, u"__pydevd_pid_code_to_run__%s" % (pid,))
|
|
377
|
+
filemap = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, BUFSIZE, "__pydevd_pid_code_to_run__%s" % (pid,))
|
|
384
378
|
|
|
385
379
|
if filemap == INVALID_HANDLE_VALUE or filemap is None:
|
|
386
380
|
raise Exception("Failed to create named file mapping (ctypes: CreateFileMapping): %s" % (filemap,))
|
|
@@ -399,26 +393,34 @@ def _win_write_to_shared_named_memory(python_code, pid):
|
|
|
399
393
|
|
|
400
394
|
|
|
401
395
|
def run_python_code_linux(pid, python_code, connect_debugger_tracing=False, show_debug_info=0):
|
|
402
|
-
assert '
|
|
396
|
+
assert "'" not in python_code, "Having a single quote messes with our command."
|
|
403
397
|
|
|
404
398
|
target_dll = get_target_filename()
|
|
405
399
|
if not target_dll:
|
|
406
|
-
|
|
400
|
+
libdir = os.path.dirname(os.path.abspath(__file__))
|
|
401
|
+
found = [name for name in os.listdir(libdir)]
|
|
402
|
+
raise RuntimeError(
|
|
403
|
+
"Could not find .so for attach to process.\nlibdir: %s\nAvailable in dir: %s"
|
|
404
|
+
% (
|
|
405
|
+
libdir,
|
|
406
|
+
found,
|
|
407
|
+
)
|
|
408
|
+
)
|
|
407
409
|
target_dll_name = os.path.splitext(os.path.basename(target_dll))[0]
|
|
408
410
|
|
|
409
411
|
# Note: we currently don't support debug builds
|
|
410
412
|
is_debug = 0
|
|
411
413
|
# Note that the space in the beginning of each line in the multi-line is important!
|
|
412
414
|
cmd = [
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
# '--quiet', # no version number on startup
|
|
418
|
-
|
|
415
|
+
"gdb",
|
|
416
|
+
"--nw", # no gui interface
|
|
417
|
+
"--nh", # no ~/.gdbinit
|
|
418
|
+
"--nx", # no .gdbinit
|
|
419
|
+
# '--quiet', # no version number on startup
|
|
420
|
+
"--pid",
|
|
419
421
|
str(pid),
|
|
420
|
-
|
|
421
|
-
# '--batch-silent',
|
|
422
|
+
"--batch",
|
|
423
|
+
# '--batch-silent',
|
|
422
424
|
]
|
|
423
425
|
|
|
424
426
|
# PYDEVD_GDB_SCAN_SHARED_LIBRARIES can be a list of strings with the shared libraries
|
|
@@ -442,16 +444,16 @@ def run_python_code_linux(pid, python_code, connect_debugger_tracing=False, show
|
|
|
442
444
|
#
|
|
443
445
|
# The downside is that it may be dependent on the Linux version being attached to (which is the
|
|
444
446
|
# reason why this is no longer done by default -- see: https://github.com/microsoft/debugpy/issues/882).
|
|
445
|
-
gdb_load_shared_libraries = os.environ.get(
|
|
447
|
+
gdb_load_shared_libraries = os.environ.get("PYDEVD_GDB_SCAN_SHARED_LIBRARIES", "").strip()
|
|
446
448
|
if gdb_load_shared_libraries:
|
|
447
|
-
print(
|
|
449
|
+
print("PYDEVD_GDB_SCAN_SHARED_LIBRARIES set: %s." % (gdb_load_shared_libraries,))
|
|
448
450
|
cmd.extend(["--init-eval-command='set auto-solib-add off'"]) # Don't scan all libraries.
|
|
449
451
|
|
|
450
|
-
for lib in gdb_load_shared_libraries.split(
|
|
452
|
+
for lib in gdb_load_shared_libraries.split(","):
|
|
451
453
|
lib = lib.strip()
|
|
452
454
|
cmd.extend(["--eval-command='sharedlibrary %s'" % (lib,)]) # Scan the specified library
|
|
453
455
|
else:
|
|
454
|
-
print(
|
|
456
|
+
print("PYDEVD_GDB_SCAN_SHARED_LIBRARIES not set (scanning all libraries for needed symbols).")
|
|
455
457
|
|
|
456
458
|
cmd.extend(["--eval-command='set scheduler-locking off'"]) # If on we'll deadlock.
|
|
457
459
|
|
|
@@ -459,79 +461,83 @@ def run_python_code_linux(pid, python_code, connect_debugger_tracing=False, show
|
|
|
459
461
|
# current host).
|
|
460
462
|
cmd.extend(["--eval-command='set architecture auto'"])
|
|
461
463
|
|
|
462
|
-
cmd.extend(
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
is_debug, python_code, show_debug_info)
|
|
467
|
-
|
|
464
|
+
cmd.extend(
|
|
465
|
+
[
|
|
466
|
+
"--eval-command='call (void*)dlopen(\"%s\", 2)'" % target_dll,
|
|
467
|
+
"--eval-command='sharedlibrary %s'" % target_dll_name,
|
|
468
|
+
"--eval-command='call (int)DoAttach(%s, \"%s\", %s)'" % (is_debug, python_code, show_debug_info),
|
|
469
|
+
]
|
|
470
|
+
)
|
|
468
471
|
|
|
469
472
|
# print ' '.join(cmd)
|
|
470
473
|
|
|
471
474
|
env = os.environ.copy()
|
|
472
475
|
# Remove the PYTHONPATH (if gdb has a builtin Python it could fail if we
|
|
473
476
|
# have the PYTHONPATH for a different python version or some forced encoding).
|
|
474
|
-
env.pop(
|
|
475
|
-
env.pop(
|
|
476
|
-
print(
|
|
477
|
-
subprocess.check_call(
|
|
477
|
+
env.pop("PYTHONIOENCODING", None)
|
|
478
|
+
env.pop("PYTHONPATH", None)
|
|
479
|
+
print("Running: %s" % (" ".join(cmd)))
|
|
480
|
+
subprocess.check_call(" ".join(cmd), shell=True, env=env)
|
|
478
481
|
|
|
479
482
|
|
|
480
483
|
def find_helper_script(filedir, script_name):
|
|
481
|
-
target_filename = os.path.join(filedir,
|
|
484
|
+
target_filename = os.path.join(filedir, "linux_and_mac", script_name)
|
|
482
485
|
target_filename = os.path.normpath(target_filename)
|
|
483
486
|
if not os.path.exists(target_filename):
|
|
484
|
-
raise RuntimeError(
|
|
487
|
+
raise RuntimeError("Could not find helper script: %s" % target_filename)
|
|
485
488
|
|
|
486
489
|
return target_filename
|
|
487
490
|
|
|
488
491
|
|
|
489
492
|
def run_python_code_mac(pid, python_code, connect_debugger_tracing=False, show_debug_info=0):
|
|
490
|
-
assert '
|
|
493
|
+
assert "'" not in python_code, "Having a single quote messes with our command."
|
|
491
494
|
|
|
492
495
|
target_dll = get_target_filename()
|
|
493
496
|
if not target_dll:
|
|
494
|
-
raise RuntimeError(
|
|
497
|
+
raise RuntimeError("Could not find .dylib for attach to process.")
|
|
495
498
|
|
|
496
499
|
libdir = os.path.dirname(__file__)
|
|
497
|
-
lldb_prepare_file = find_helper_script(libdir,
|
|
500
|
+
lldb_prepare_file = find_helper_script(libdir, "lldb_prepare.py")
|
|
498
501
|
# Note: we currently don't support debug builds
|
|
499
502
|
|
|
500
503
|
is_debug = 0
|
|
501
504
|
# Note that the space in the beginning of each line in the multi-line is important!
|
|
502
505
|
cmd = [
|
|
503
|
-
|
|
504
|
-
|
|
506
|
+
"lldb",
|
|
507
|
+
"--no-lldbinit", # Do not automatically parse any '.lldbinit' files.
|
|
505
508
|
# '--attach-pid',
|
|
506
509
|
# str(pid),
|
|
507
510
|
# '--arch',
|
|
508
511
|
# arch,
|
|
509
|
-
|
|
510
|
-
|
|
512
|
+
"--script-language",
|
|
513
|
+
"Python",
|
|
511
514
|
# '--batch-silent',
|
|
512
515
|
]
|
|
513
516
|
|
|
514
|
-
cmd.extend(
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
is_debug, python_code, show_debug_info),
|
|
519
|
-
|
|
517
|
+
cmd.extend(
|
|
518
|
+
[
|
|
519
|
+
"-o 'process attach --pid %d'" % pid,
|
|
520
|
+
"-o 'command script import \"%s\"'" % (lldb_prepare_file,),
|
|
521
|
+
'-o \'load_lib_and_attach "%s" %s "%s" %s\'' % (target_dll, is_debug, python_code, show_debug_info),
|
|
522
|
+
]
|
|
523
|
+
)
|
|
520
524
|
|
|
521
|
-
cmd.extend(
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
+
cmd.extend(
|
|
526
|
+
[
|
|
527
|
+
"-o 'process detach'",
|
|
528
|
+
"-o 'script import os; os._exit(1)'",
|
|
529
|
+
]
|
|
530
|
+
)
|
|
525
531
|
|
|
526
532
|
# print ' '.join(cmd)
|
|
527
533
|
|
|
528
534
|
env = os.environ.copy()
|
|
529
535
|
# Remove the PYTHONPATH (if lldb has a builtin Python it could fail if we
|
|
530
536
|
# have the PYTHONPATH for a different python version or some forced encoding).
|
|
531
|
-
env.pop(
|
|
532
|
-
env.pop(
|
|
533
|
-
print(
|
|
534
|
-
subprocess.check_call(
|
|
537
|
+
env.pop("PYTHONIOENCODING", None)
|
|
538
|
+
env.pop("PYTHONPATH", None)
|
|
539
|
+
print("Running: %s" % (" ".join(cmd)))
|
|
540
|
+
subprocess.check_call(" ".join(cmd), shell=True, env=env)
|
|
535
541
|
|
|
536
542
|
|
|
537
543
|
if IS_WINDOWS:
|
|
@@ -543,12 +549,12 @@ elif IS_LINUX:
|
|
|
543
549
|
else:
|
|
544
550
|
|
|
545
551
|
def run_python_code(*args, **kwargs):
|
|
546
|
-
print(
|
|
552
|
+
print("Unable to attach to process in platform: %s", sys.platform)
|
|
547
553
|
|
|
548
554
|
|
|
549
555
|
def test():
|
|
550
|
-
print(
|
|
551
|
-
code =
|
|
556
|
+
print("Running with: %s" % (sys.executable,))
|
|
557
|
+
code = """
|
|
552
558
|
import os, time, sys
|
|
553
559
|
print(os.getpid())
|
|
554
560
|
#from threading import Thread
|
|
@@ -558,16 +564,16 @@ if __name__ == '__main__':
|
|
|
558
564
|
time.sleep(.5)
|
|
559
565
|
sys.stdout.write('.\\n')
|
|
560
566
|
sys.stdout.flush()
|
|
561
|
-
|
|
567
|
+
"""
|
|
562
568
|
|
|
563
|
-
p = subprocess.Popen([sys.executable,
|
|
569
|
+
p = subprocess.Popen([sys.executable, "-u", "-c", code])
|
|
564
570
|
try:
|
|
565
571
|
code = 'print("It worked!")\n'
|
|
566
572
|
|
|
567
573
|
# Real code will be something as:
|
|
568
574
|
# code = '''import sys;sys.path.append(r'X:\winappdbg-code\examples'); import imported;'''
|
|
569
575
|
run_python_code(p.pid, python_code=code)
|
|
570
|
-
print(
|
|
576
|
+
print("\nRun a 2nd time...\n")
|
|
571
577
|
run_python_code(p.pid, python_code=code)
|
|
572
578
|
|
|
573
579
|
time.sleep(3)
|
|
@@ -580,19 +586,18 @@ def main(args):
|
|
|
580
586
|
# in the target process.
|
|
581
587
|
pid = int(args[0])
|
|
582
588
|
del args[0]
|
|
583
|
-
python_code =
|
|
589
|
+
python_code = ";".join(args)
|
|
584
590
|
|
|
585
591
|
# Note: on Linux the python code may not have a single quote char: '
|
|
586
592
|
run_python_code(pid, python_code)
|
|
587
593
|
|
|
588
594
|
|
|
589
|
-
if __name__ ==
|
|
595
|
+
if __name__ == "__main__":
|
|
590
596
|
args = sys.argv[1:]
|
|
591
597
|
if not args:
|
|
592
|
-
print(
|
|
598
|
+
print("Expected pid and Python code to execute in target process.")
|
|
593
599
|
else:
|
|
594
|
-
if
|
|
600
|
+
if "--test" == args[0]:
|
|
595
601
|
test()
|
|
596
602
|
else:
|
|
597
603
|
main(args)
|
|
598
|
-
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def process_command_line(argv):
|
|
6
|
+
setup = {}
|
|
7
|
+
setup["port"] = 5678 # Default port for PyDev remote debugger
|
|
8
|
+
setup["pid"] = 0
|
|
9
|
+
setup["host"] = "127.0.0.1"
|
|
10
|
+
setup["protocol"] = ""
|
|
11
|
+
setup["debug-mode"] = ""
|
|
12
|
+
|
|
13
|
+
i = 0
|
|
14
|
+
while i < len(argv):
|
|
15
|
+
if argv[i] == "--port":
|
|
16
|
+
del argv[i]
|
|
17
|
+
setup["port"] = int(argv[i])
|
|
18
|
+
del argv[i]
|
|
19
|
+
|
|
20
|
+
elif argv[i] == "--pid":
|
|
21
|
+
del argv[i]
|
|
22
|
+
setup["pid"] = int(argv[i])
|
|
23
|
+
del argv[i]
|
|
24
|
+
|
|
25
|
+
elif argv[i] == "--host":
|
|
26
|
+
del argv[i]
|
|
27
|
+
setup["host"] = argv[i]
|
|
28
|
+
del argv[i]
|
|
29
|
+
|
|
30
|
+
elif argv[i] == "--protocol":
|
|
31
|
+
del argv[i]
|
|
32
|
+
setup["protocol"] = argv[i]
|
|
33
|
+
del argv[i]
|
|
34
|
+
|
|
35
|
+
elif argv[i] == "--debug-mode":
|
|
36
|
+
del argv[i]
|
|
37
|
+
setup["debug-mode"] = argv[i]
|
|
38
|
+
del argv[i]
|
|
39
|
+
|
|
40
|
+
if not setup["pid"]:
|
|
41
|
+
sys.stderr.write("Expected --pid to be passed.\n")
|
|
42
|
+
sys.exit(1)
|
|
43
|
+
return setup
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def main(setup):
|
|
47
|
+
sys.path.append(os.path.dirname(__file__))
|
|
48
|
+
import add_code_to_python_process
|
|
49
|
+
|
|
50
|
+
show_debug_info_on_target_process = 0
|
|
51
|
+
|
|
52
|
+
pydevd_dirname = os.path.dirname(os.path.dirname(__file__))
|
|
53
|
+
|
|
54
|
+
if sys.platform == "win32":
|
|
55
|
+
setup["pythonpath"] = pydevd_dirname.replace("\\", "/")
|
|
56
|
+
setup["pythonpath2"] = os.path.dirname(__file__).replace("\\", "/")
|
|
57
|
+
python_code = (
|
|
58
|
+
"""import sys;
|
|
59
|
+
sys.path.append("%(pythonpath)s");
|
|
60
|
+
sys.path.append("%(pythonpath2)s");
|
|
61
|
+
import attach_script;
|
|
62
|
+
attach_script.attach(port=%(port)s, host="%(host)s", protocol="%(protocol)s", debug_mode="%(debug-mode)s");
|
|
63
|
+
""".replace("\r\n", "")
|
|
64
|
+
.replace("\r", "")
|
|
65
|
+
.replace("\n", "")
|
|
66
|
+
)
|
|
67
|
+
else:
|
|
68
|
+
setup["pythonpath"] = pydevd_dirname
|
|
69
|
+
setup["pythonpath2"] = os.path.dirname(__file__)
|
|
70
|
+
# We have to pass it a bit differently for gdb
|
|
71
|
+
python_code = (
|
|
72
|
+
"""import sys;
|
|
73
|
+
sys.path.append(\\\"%(pythonpath)s\\\");
|
|
74
|
+
sys.path.append(\\\"%(pythonpath2)s\\\");
|
|
75
|
+
import attach_script;
|
|
76
|
+
attach_script.attach(port=%(port)s, host=\\\"%(host)s\\\", protocol=\\\"%(protocol)s\\\", debug_mode=\\\"%(debug-mode)s\\\");
|
|
77
|
+
""".replace("\r\n", "")
|
|
78
|
+
.replace("\r", "")
|
|
79
|
+
.replace("\n", "")
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
python_code = python_code % setup
|
|
83
|
+
add_code_to_python_process.run_python_code(
|
|
84
|
+
setup["pid"], python_code, connect_debugger_tracing=True, show_debug_info=show_debug_info_on_target_process
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if __name__ == "__main__":
|
|
89
|
+
main(process_command_line(sys.argv[1:]))
|