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
|
@@ -37,7 +37,7 @@ SQL database storage support.
|
|
|
37
37
|
|
|
38
38
|
__revision__ = "$Id$"
|
|
39
39
|
|
|
40
|
-
__all__ = [
|
|
40
|
+
__all__ = ["CrashDAO"]
|
|
41
41
|
|
|
42
42
|
import sqlite3
|
|
43
43
|
import datetime
|
|
@@ -50,46 +50,52 @@ from sqlalchemy.ext.declarative import declarative_base
|
|
|
50
50
|
from sqlalchemy.interfaces import PoolListener
|
|
51
51
|
from sqlalchemy.orm import sessionmaker, deferred
|
|
52
52
|
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
|
|
53
|
-
from sqlalchemy.types import Integer, BigInteger, Boolean, DateTime, String,
|
|
54
|
-
LargeBinary, Enum, VARCHAR
|
|
53
|
+
from sqlalchemy.types import Integer, BigInteger, Boolean, DateTime, String, LargeBinary, Enum, VARCHAR
|
|
55
54
|
from sqlalchemy.sql.expression import asc, desc
|
|
56
55
|
|
|
57
56
|
from crash import Crash, Marshaller, pickle, HIGHEST_PROTOCOL
|
|
58
57
|
from textio import CrashDump
|
|
59
58
|
import win32
|
|
60
59
|
|
|
61
|
-
|
|
60
|
+
# ------------------------------------------------------------------------------
|
|
62
61
|
|
|
63
62
|
try:
|
|
64
63
|
from decorator import decorator
|
|
65
64
|
except ImportError:
|
|
66
65
|
import functools
|
|
66
|
+
|
|
67
67
|
def decorator(w):
|
|
68
68
|
"""
|
|
69
69
|
The C{decorator} module was not found. You can install it from:
|
|
70
70
|
U{http://pypi.python.org/pypi/decorator/}
|
|
71
71
|
"""
|
|
72
|
+
|
|
72
73
|
def d(fn):
|
|
73
74
|
@functools.wraps(fn)
|
|
74
75
|
def x(*argv, **argd):
|
|
75
76
|
return w(fn, *argv, **argd)
|
|
77
|
+
|
|
76
78
|
return x
|
|
79
|
+
|
|
77
80
|
return d
|
|
78
81
|
|
|
79
|
-
|
|
82
|
+
# ------------------------------------------------------------------------------
|
|
80
83
|
|
|
81
|
-
|
|
82
|
-
@compiles(
|
|
84
|
+
|
|
85
|
+
@compiles(String, "mysql")
|
|
86
|
+
@compiles(VARCHAR, "mysql")
|
|
83
87
|
def _compile_varchar_mysql(element, compiler, **kw):
|
|
84
88
|
"""MySQL hack to avoid the "VARCHAR requires a length" error."""
|
|
85
|
-
if not element.length or element.length ==
|
|
89
|
+
if not element.length or element.length == "max":
|
|
86
90
|
return "TEXT"
|
|
87
91
|
else:
|
|
88
92
|
return compiler.visit_VARCHAR(element, **kw)
|
|
89
93
|
|
|
90
|
-
#------------------------------------------------------------------------------
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
# ------------------------------------------------------------------------------
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class _SQLitePatch(PoolListener):
|
|
93
99
|
"""
|
|
94
100
|
Used internally by L{BaseDAO}.
|
|
95
101
|
|
|
@@ -98,6 +104,7 @@ class _SQLitePatch (PoolListener):
|
|
|
98
104
|
|
|
99
105
|
@see: U{http://sqlite.org/foreignkeys.html}
|
|
100
106
|
"""
|
|
107
|
+
|
|
101
108
|
def connect(dbapi_connection, connection_record):
|
|
102
109
|
"""
|
|
103
110
|
Called once by SQLAlchemy for each new SQLite DB-API connection.
|
|
@@ -124,29 +131,28 @@ class _SQLitePatch (PoolListener):
|
|
|
124
131
|
dbapi_connection.close()
|
|
125
132
|
raise sqlite3.Error()
|
|
126
133
|
|
|
127
|
-
#------------------------------------------------------------------------------
|
|
128
134
|
|
|
129
|
-
|
|
135
|
+
# ------------------------------------------------------------------------------
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class BaseDTO(object):
|
|
130
139
|
"""
|
|
131
140
|
Customized declarative base for SQLAlchemy.
|
|
132
141
|
"""
|
|
133
142
|
|
|
134
143
|
__table_args__ = {
|
|
135
|
-
|
|
136
144
|
# Don't use MyISAM in MySQL. It doesn't support ON DELETE CASCADE.
|
|
137
|
-
|
|
138
|
-
|
|
145
|
+
"mysql_engine": "InnoDB",
|
|
139
146
|
# Don't use BlitzDB in Drizzle. It doesn't support foreign keys.
|
|
140
|
-
|
|
141
|
-
|
|
147
|
+
"drizzle_engine": "InnoDB",
|
|
142
148
|
# Collate to UTF-8.
|
|
143
|
-
|
|
149
|
+
"mysql_charset": "utf8",
|
|
150
|
+
}
|
|
144
151
|
|
|
145
|
-
}
|
|
146
152
|
|
|
147
|
-
BaseDTO = declarative_base(cls
|
|
153
|
+
BaseDTO = declarative_base(cls=BaseDTO)
|
|
148
154
|
|
|
149
|
-
|
|
155
|
+
# ------------------------------------------------------------------------------
|
|
150
156
|
|
|
151
157
|
# TODO: if using mssql, check it's at least SQL Server 2005
|
|
152
158
|
# (LIMIT and OFFSET support is required).
|
|
@@ -160,7 +166,8 @@ BaseDTO = declarative_base(cls = BaseDTO)
|
|
|
160
166
|
# http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html
|
|
161
167
|
# http://msdn.microsoft.com/en-us/library/ms174459(v=sql.90).aspx
|
|
162
168
|
|
|
163
|
-
|
|
169
|
+
|
|
170
|
+
class BaseDAO(object):
|
|
164
171
|
"""
|
|
165
172
|
Data Access Object base class.
|
|
166
173
|
|
|
@@ -187,12 +194,9 @@ class BaseDAO (object):
|
|
|
187
194
|
|
|
188
195
|
_echo = False
|
|
189
196
|
|
|
190
|
-
_new_session = sessionmaker(autoflush = True,
|
|
191
|
-
autocommit = True,
|
|
192
|
-
expire_on_commit = True,
|
|
193
|
-
weak_identity_map = True)
|
|
197
|
+
_new_session = sessionmaker(autoflush=True, autocommit=True, expire_on_commit=True, weak_identity_map=True)
|
|
194
198
|
|
|
195
|
-
def __init__(self, url, creator
|
|
199
|
+
def __init__(self, url, creator=None):
|
|
196
200
|
"""
|
|
197
201
|
Connect to the database using the given connection URL.
|
|
198
202
|
|
|
@@ -252,34 +256,34 @@ class BaseDAO (object):
|
|
|
252
256
|
# Parse the connection URL.
|
|
253
257
|
parsed_url = URL(url)
|
|
254
258
|
schema = parsed_url.drivername
|
|
255
|
-
if
|
|
256
|
-
dialect, driver = schema.split(
|
|
259
|
+
if "+" in schema:
|
|
260
|
+
dialect, driver = schema.split("+")
|
|
257
261
|
else:
|
|
258
|
-
dialect, driver = schema,
|
|
262
|
+
dialect, driver = schema, "base"
|
|
259
263
|
dialect = dialect.strip().lower()
|
|
260
264
|
driver = driver.strip()
|
|
261
265
|
|
|
262
266
|
# Prepare the database engine arguments.
|
|
263
|
-
arguments = {
|
|
264
|
-
if dialect ==
|
|
265
|
-
arguments[
|
|
266
|
-
arguments[
|
|
267
|
+
arguments = {"echo": self._echo}
|
|
268
|
+
if dialect == "sqlite":
|
|
269
|
+
arguments["module"] = sqlite3.dbapi2
|
|
270
|
+
arguments["listeners"] = [_SQLitePatch()]
|
|
267
271
|
if creator is not None:
|
|
268
|
-
arguments[
|
|
272
|
+
arguments["creator"] = creator
|
|
269
273
|
|
|
270
274
|
# Load the database engine.
|
|
271
275
|
engine = create_engine(url, **arguments)
|
|
272
276
|
|
|
273
277
|
# Create a new session.
|
|
274
|
-
session = self._new_session(bind
|
|
278
|
+
session = self._new_session(bind=engine)
|
|
275
279
|
|
|
276
280
|
# Create the required tables if they don't exist.
|
|
277
281
|
BaseDTO.metadata.create_all(engine)
|
|
278
282
|
# TODO: create a dialect specific index on the "signature" column.
|
|
279
283
|
|
|
280
284
|
# Set the instance properties.
|
|
281
|
-
self._url
|
|
282
|
-
self._driver
|
|
285
|
+
self._url = parsed_url
|
|
286
|
+
self._driver = driver
|
|
283
287
|
self._dialect = dialect
|
|
284
288
|
self._session = session
|
|
285
289
|
|
|
@@ -299,7 +303,7 @@ class BaseDAO (object):
|
|
|
299
303
|
|
|
300
304
|
@raise Exception: Any exception raised by the method.
|
|
301
305
|
"""
|
|
302
|
-
self._session.begin(subtransactions
|
|
306
|
+
self._session.begin(subtransactions=True)
|
|
303
307
|
try:
|
|
304
308
|
result = method(self, *argv, **argd)
|
|
305
309
|
self._session.commit()
|
|
@@ -308,7 +312,9 @@ class BaseDAO (object):
|
|
|
308
312
|
self._session.rollback()
|
|
309
313
|
raise
|
|
310
314
|
|
|
311
|
-
|
|
315
|
+
|
|
316
|
+
# ------------------------------------------------------------------------------
|
|
317
|
+
|
|
312
318
|
|
|
313
319
|
@decorator
|
|
314
320
|
def Transactional(fn, self, *argv, **argd):
|
|
@@ -319,7 +325,9 @@ def Transactional(fn, self, *argv, **argd):
|
|
|
319
325
|
"""
|
|
320
326
|
return self._transactional(fn, *argv, **argd)
|
|
321
327
|
|
|
322
|
-
|
|
328
|
+
|
|
329
|
+
# ==============================================================================
|
|
330
|
+
|
|
323
331
|
|
|
324
332
|
# Generates all possible memory access flags.
|
|
325
333
|
def _gen_valid_access_flags():
|
|
@@ -330,19 +338,17 @@ def _gen_valid_access_flags():
|
|
|
330
338
|
for a4 in ("W", "-"):
|
|
331
339
|
f.append("%s %s%s%s" % (a1, a2, a3, a4))
|
|
332
340
|
return tuple(f)
|
|
341
|
+
|
|
342
|
+
|
|
333
343
|
_valid_access_flags = _gen_valid_access_flags()
|
|
334
344
|
|
|
335
345
|
# Enumerated types for the memory table.
|
|
336
|
-
n_MEM_ACCESS_ENUM = {"name"
|
|
337
|
-
n_MEM_ALLOC_ACCESS_ENUM = {"name"
|
|
338
|
-
MEM_ACCESS_ENUM = Enum(*_valid_access_flags,
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
MEM_STATE_ENUM = Enum("Reserved", "Commited", "Free", "Unknown",
|
|
343
|
-
name = "MEM_STATE_ENUM")
|
|
344
|
-
MEM_TYPE_ENUM = Enum("Image", "Mapped", "Private", "Unknown",
|
|
345
|
-
name = "MEM_TYPE_ENUM")
|
|
346
|
+
n_MEM_ACCESS_ENUM = {"name": "MEM_ACCESS_ENUM"}
|
|
347
|
+
n_MEM_ALLOC_ACCESS_ENUM = {"name": "MEM_ALLOC_ACCESS_ENUM"}
|
|
348
|
+
MEM_ACCESS_ENUM = Enum(*_valid_access_flags, **n_MEM_ACCESS_ENUM)
|
|
349
|
+
MEM_ALLOC_ACCESS_ENUM = Enum(*_valid_access_flags, **n_MEM_ALLOC_ACCESS_ENUM)
|
|
350
|
+
MEM_STATE_ENUM = Enum("Reserved", "Commited", "Free", "Unknown", name="MEM_STATE_ENUM")
|
|
351
|
+
MEM_TYPE_ENUM = Enum("Image", "Mapped", "Private", "Unknown", name="MEM_TYPE_ENUM")
|
|
346
352
|
|
|
347
353
|
# Cleanup the namespace.
|
|
348
354
|
del _gen_valid_access_flags
|
|
@@ -350,30 +356,27 @@ del _valid_access_flags
|
|
|
350
356
|
del n_MEM_ACCESS_ENUM
|
|
351
357
|
del n_MEM_ALLOC_ACCESS_ENUM
|
|
352
358
|
|
|
353
|
-
|
|
359
|
+
# ------------------------------------------------------------------------------
|
|
360
|
+
|
|
354
361
|
|
|
355
|
-
class MemoryDTO
|
|
362
|
+
class MemoryDTO(BaseDTO):
|
|
356
363
|
"""
|
|
357
364
|
Database mapping for memory dumps.
|
|
358
365
|
"""
|
|
359
366
|
|
|
360
367
|
# Declare the table mapping.
|
|
361
|
-
__tablename__ =
|
|
362
|
-
id
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
alloc_base = Column(BigInteger)
|
|
374
|
-
alloc_access = Column(MEM_ALLOC_ACCESS_ENUM)
|
|
375
|
-
filename = Column(String)
|
|
376
|
-
content = deferred(Column(LargeBinary))
|
|
368
|
+
__tablename__ = "memory"
|
|
369
|
+
id = Column(Integer, Sequence(__tablename__ + "_seq"), primary_key=True, autoincrement=True)
|
|
370
|
+
crash_id = Column(Integer, ForeignKey("crashes.id", ondelete="CASCADE", onupdate="CASCADE"), nullable=False)
|
|
371
|
+
address = Column(BigInteger, nullable=False, index=True)
|
|
372
|
+
size = Column(BigInteger, nullable=False)
|
|
373
|
+
state = Column(MEM_STATE_ENUM, nullable=False)
|
|
374
|
+
access = Column(MEM_ACCESS_ENUM)
|
|
375
|
+
type = Column(MEM_TYPE_ENUM)
|
|
376
|
+
alloc_base = Column(BigInteger)
|
|
377
|
+
alloc_access = Column(MEM_ALLOC_ACCESS_ENUM)
|
|
378
|
+
filename = Column(String)
|
|
379
|
+
content = deferred(Column(LargeBinary))
|
|
377
380
|
|
|
378
381
|
def __init__(self, crash_id, mbi):
|
|
379
382
|
"""
|
|
@@ -390,7 +393,7 @@ class MemoryDTO (BaseDTO):
|
|
|
390
393
|
self.size = mbi.RegionSize
|
|
391
394
|
|
|
392
395
|
# State (free or allocated).
|
|
393
|
-
if
|
|
396
|
+
if mbi.State == win32.MEM_RESERVE:
|
|
394
397
|
self.state = "Reserved"
|
|
395
398
|
elif mbi.State == win32.MEM_COMMIT:
|
|
396
399
|
self.state = "Commited"
|
|
@@ -406,7 +409,7 @@ class MemoryDTO (BaseDTO):
|
|
|
406
409
|
self.access = self._to_access(mbi.Protect)
|
|
407
410
|
|
|
408
411
|
# Type (file mapping, executable image, or private memory).
|
|
409
|
-
if
|
|
412
|
+
if mbi.Type == win32.MEM_IMAGE:
|
|
410
413
|
self.type = "Image"
|
|
411
414
|
elif mbi.Type == win32.MEM_MAPPED:
|
|
412
415
|
self.type = "Mapped"
|
|
@@ -418,7 +421,7 @@ class MemoryDTO (BaseDTO):
|
|
|
418
421
|
self.type = "Unknown"
|
|
419
422
|
|
|
420
423
|
# Allocation info.
|
|
421
|
-
self.alloc_base
|
|
424
|
+
self.alloc_base = mbi.AllocationBase
|
|
422
425
|
if not mbi.AllocationProtect:
|
|
423
426
|
self.alloc_access = None
|
|
424
427
|
else:
|
|
@@ -437,7 +440,7 @@ class MemoryDTO (BaseDTO):
|
|
|
437
440
|
self.content = None
|
|
438
441
|
|
|
439
442
|
def _to_access(self, protect):
|
|
440
|
-
if
|
|
443
|
+
if protect & win32.PAGE_NOACCESS:
|
|
441
444
|
access = "--- "
|
|
442
445
|
elif protect & win32.PAGE_READONLY:
|
|
443
446
|
access = "R-- "
|
|
@@ -455,21 +458,21 @@ class MemoryDTO (BaseDTO):
|
|
|
455
458
|
access = "RCX "
|
|
456
459
|
else:
|
|
457
460
|
access = "??? "
|
|
458
|
-
if
|
|
461
|
+
if protect & win32.PAGE_GUARD:
|
|
459
462
|
access += "G"
|
|
460
463
|
else:
|
|
461
464
|
access += "-"
|
|
462
|
-
if
|
|
465
|
+
if protect & win32.PAGE_NOCACHE:
|
|
463
466
|
access += "N"
|
|
464
467
|
else:
|
|
465
468
|
access += "-"
|
|
466
|
-
if
|
|
469
|
+
if protect & win32.PAGE_WRITECOMBINE:
|
|
467
470
|
access += "W"
|
|
468
471
|
else:
|
|
469
472
|
access += "-"
|
|
470
473
|
return access
|
|
471
474
|
|
|
472
|
-
def toMBI(self, getMemoryDump
|
|
475
|
+
def toMBI(self, getMemoryDump=False):
|
|
473
476
|
"""
|
|
474
477
|
Returns a L{win32.MemoryBasicInformation} object using the data
|
|
475
478
|
retrieved from the database.
|
|
@@ -483,10 +486,10 @@ class MemoryDTO (BaseDTO):
|
|
|
483
486
|
"""
|
|
484
487
|
mbi = win32.MemoryBasicInformation()
|
|
485
488
|
mbi.BaseAddress = self.address
|
|
486
|
-
mbi.RegionSize
|
|
487
|
-
mbi.State
|
|
488
|
-
mbi.Protect
|
|
489
|
-
mbi.Type
|
|
489
|
+
mbi.RegionSize = self.size
|
|
490
|
+
mbi.State = self._parse_state(self.state)
|
|
491
|
+
mbi.Protect = self._parse_access(self.access)
|
|
492
|
+
mbi.Type = self._parse_type(self.type)
|
|
490
493
|
if self.alloc_base is not None:
|
|
491
494
|
mbi.AllocationBase = self.alloc_base
|
|
492
495
|
else:
|
|
@@ -498,7 +501,7 @@ class MemoryDTO (BaseDTO):
|
|
|
498
501
|
if self.filename is not None:
|
|
499
502
|
mbi.filename = self.filename
|
|
500
503
|
if getMemoryDump and self.content is not None:
|
|
501
|
-
mbi.content
|
|
504
|
+
mbi.content = self.content
|
|
502
505
|
return mbi
|
|
503
506
|
|
|
504
507
|
@staticmethod
|
|
@@ -529,7 +532,7 @@ class MemoryDTO (BaseDTO):
|
|
|
529
532
|
if not access:
|
|
530
533
|
return 0
|
|
531
534
|
perm = access[:3]
|
|
532
|
-
if
|
|
535
|
+
if perm == "R--":
|
|
533
536
|
protect = win32.PAGE_READONLY
|
|
534
537
|
elif perm == "RW-":
|
|
535
538
|
protect = win32.PAGE_READWRITE
|
|
@@ -553,9 +556,11 @@ class MemoryDTO (BaseDTO):
|
|
|
553
556
|
protect = protect | win32.PAGE_WRITECOMBINE
|
|
554
557
|
return protect
|
|
555
558
|
|
|
556
|
-
#------------------------------------------------------------------------------
|
|
557
559
|
|
|
558
|
-
|
|
560
|
+
# ------------------------------------------------------------------------------
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
class CrashDTO(BaseDTO):
|
|
559
564
|
"""
|
|
560
565
|
Database mapping for crash dumps.
|
|
561
566
|
"""
|
|
@@ -564,31 +569,30 @@ class CrashDTO (BaseDTO):
|
|
|
564
569
|
__tablename__ = "crashes"
|
|
565
570
|
|
|
566
571
|
# Primary key.
|
|
567
|
-
id = Column(Integer, Sequence(__tablename__ +
|
|
568
|
-
primary_key = True, autoincrement = True)
|
|
572
|
+
id = Column(Integer, Sequence(__tablename__ + "_seq"), primary_key=True, autoincrement=True)
|
|
569
573
|
|
|
570
574
|
# Timestamp.
|
|
571
|
-
timestamp = Column(DateTime, nullable
|
|
575
|
+
timestamp = Column(DateTime, nullable=False, index=True)
|
|
572
576
|
|
|
573
577
|
# Exploitability test.
|
|
574
|
-
exploitable = Column(Integer, nullable
|
|
575
|
-
exploitability_rule = Column(String(32), nullable
|
|
576
|
-
exploitability_rating = Column(String(32), nullable
|
|
577
|
-
exploitability_desc = Column(String, nullable
|
|
578
|
+
exploitable = Column(Integer, nullable=False)
|
|
579
|
+
exploitability_rule = Column(String(32), nullable=False)
|
|
580
|
+
exploitability_rating = Column(String(32), nullable=False)
|
|
581
|
+
exploitability_desc = Column(String, nullable=False)
|
|
578
582
|
|
|
579
583
|
# Platform description.
|
|
580
|
-
os = Column(String(32), nullable
|
|
581
|
-
arch = Column(String(16), nullable
|
|
582
|
-
bits = Column(Integer, nullable
|
|
584
|
+
os = Column(String(32), nullable=False)
|
|
585
|
+
arch = Column(String(16), nullable=False)
|
|
586
|
+
bits = Column(Integer, nullable=False) # Integer(4) is deprecated :(
|
|
583
587
|
|
|
584
588
|
# Event description.
|
|
585
|
-
event = Column(String, nullable
|
|
586
|
-
pid = Column(Integer, nullable
|
|
587
|
-
tid = Column(Integer, nullable
|
|
588
|
-
pc = Column(BigInteger, nullable
|
|
589
|
-
sp = Column(BigInteger, nullable
|
|
590
|
-
fp = Column(BigInteger, nullable
|
|
591
|
-
pc_label = Column(String, nullable
|
|
589
|
+
event = Column(String, nullable=False)
|
|
590
|
+
pid = Column(Integer, nullable=False)
|
|
591
|
+
tid = Column(Integer, nullable=False)
|
|
592
|
+
pc = Column(BigInteger, nullable=False)
|
|
593
|
+
sp = Column(BigInteger, nullable=False)
|
|
594
|
+
fp = Column(BigInteger, nullable=False)
|
|
595
|
+
pc_label = Column(String, nullable=False)
|
|
592
596
|
|
|
593
597
|
# Exception description.
|
|
594
598
|
exception = Column(String(64))
|
|
@@ -613,10 +617,10 @@ class CrashDTO (BaseDTO):
|
|
|
613
617
|
notes = Column(String)
|
|
614
618
|
|
|
615
619
|
# Heuristic signature.
|
|
616
|
-
signature = Column(String, nullable
|
|
620
|
+
signature = Column(String, nullable=False)
|
|
617
621
|
|
|
618
622
|
# Pickled Crash object, minus the memory dump.
|
|
619
|
-
data = deferred(Column(LargeBinary, nullable
|
|
623
|
+
data = deferred(Column(LargeBinary, nullable=False))
|
|
620
624
|
|
|
621
625
|
def __init__(self, crash):
|
|
622
626
|
"""
|
|
@@ -625,60 +629,56 @@ class CrashDTO (BaseDTO):
|
|
|
625
629
|
"""
|
|
626
630
|
|
|
627
631
|
# Timestamp and signature.
|
|
628
|
-
self.timestamp = datetime.datetime.fromtimestamp(
|
|
629
|
-
self.signature = pickle.dumps(crash.signature, protocol
|
|
632
|
+
self.timestamp = datetime.datetime.fromtimestamp(crash.timeStamp)
|
|
633
|
+
self.signature = pickle.dumps(crash.signature, protocol=0)
|
|
630
634
|
|
|
631
635
|
# Marshalled Crash object, minus the memory dump.
|
|
632
636
|
# This code is *not* thread safe!
|
|
633
637
|
memoryMap = crash.memoryMap
|
|
634
638
|
try:
|
|
635
639
|
crash.memoryMap = None
|
|
636
|
-
self.data = buffer(
|
|
640
|
+
self.data = buffer(Marshaller.dumps(crash))
|
|
637
641
|
finally:
|
|
638
642
|
crash.memoryMap = memoryMap
|
|
639
643
|
|
|
640
644
|
# Exploitability test.
|
|
641
|
-
self.exploitability_rating,
|
|
642
|
-
self.exploitability_rule, \
|
|
643
|
-
self.exploitability_desc = crash.isExploitable()
|
|
645
|
+
self.exploitability_rating, self.exploitability_rule, self.exploitability_desc = crash.isExploitable()
|
|
644
646
|
|
|
645
647
|
# Exploitability test as an integer result (for sorting).
|
|
646
648
|
self.exploitable = [
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
649
|
+
"Not an exception",
|
|
650
|
+
"Not exploitable",
|
|
651
|
+
"Not likely exploitable",
|
|
652
|
+
"Unknown",
|
|
653
|
+
"Probably exploitable",
|
|
654
|
+
"Exploitable",
|
|
655
|
+
].index(self.exploitability_rating)
|
|
654
656
|
|
|
655
657
|
# Platform description.
|
|
656
|
-
self.os
|
|
658
|
+
self.os = crash.os
|
|
657
659
|
self.arch = crash.arch
|
|
658
660
|
self.bits = crash.bits
|
|
659
661
|
|
|
660
662
|
# Event description.
|
|
661
|
-
self.event
|
|
662
|
-
self.pid
|
|
663
|
-
self.tid
|
|
664
|
-
self.pc
|
|
665
|
-
self.sp
|
|
666
|
-
self.fp
|
|
663
|
+
self.event = crash.eventName
|
|
664
|
+
self.pid = crash.pid
|
|
665
|
+
self.tid = crash.tid
|
|
666
|
+
self.pc = crash.pc
|
|
667
|
+
self.sp = crash.sp
|
|
668
|
+
self.fp = crash.fp
|
|
667
669
|
self.pc_label = crash.labelPC
|
|
668
670
|
|
|
669
671
|
# Exception description.
|
|
670
|
-
self.exception
|
|
671
|
-
self.exception_text
|
|
672
|
+
self.exception = crash.exceptionName
|
|
673
|
+
self.exception_text = crash.exceptionDescription
|
|
672
674
|
self.exception_address = crash.exceptionAddress
|
|
673
|
-
self.exception_label
|
|
674
|
-
self.first_chance
|
|
675
|
-
self.fault_type
|
|
676
|
-
self.fault_address
|
|
677
|
-
self.fault_label
|
|
678
|
-
self.fault_disasm
|
|
679
|
-
|
|
680
|
-
self.stack_trace = CrashDump.dump_stack_trace_with_labels(
|
|
681
|
-
crash.stackTracePretty )
|
|
675
|
+
self.exception_label = crash.exceptionLabel
|
|
676
|
+
self.first_chance = crash.firstChance
|
|
677
|
+
self.fault_type = crash.faultType
|
|
678
|
+
self.fault_address = crash.faultAddress
|
|
679
|
+
self.fault_label = crash.faultLabel
|
|
680
|
+
self.fault_disasm = CrashDump.dump_code(crash.faultDisasm, crash.pc)
|
|
681
|
+
self.stack_trace = CrashDump.dump_stack_trace_with_labels(crash.stackTracePretty)
|
|
682
682
|
|
|
683
683
|
# Command line.
|
|
684
684
|
self.command_line = crash.commandLine
|
|
@@ -687,11 +687,11 @@ class CrashDTO (BaseDTO):
|
|
|
687
687
|
if crash.environment:
|
|
688
688
|
envList = crash.environment.items()
|
|
689
689
|
envList.sort()
|
|
690
|
-
environment =
|
|
690
|
+
environment = ""
|
|
691
691
|
for envKey, envVal in envList:
|
|
692
692
|
# Must concatenate here instead of using a substitution,
|
|
693
693
|
# so strings can be automatically promoted to Unicode.
|
|
694
|
-
environment += envKey +
|
|
694
|
+
environment += envKey + "=" + envVal + "\n"
|
|
695
695
|
if environment:
|
|
696
696
|
self.environment = environment
|
|
697
697
|
|
|
@@ -701,7 +701,7 @@ class CrashDTO (BaseDTO):
|
|
|
701
701
|
# Notes.
|
|
702
702
|
self.notes = crash.notesReport()
|
|
703
703
|
|
|
704
|
-
def toCrash(self, getMemoryDump
|
|
704
|
+
def toCrash(self, getMemoryDump=False):
|
|
705
705
|
"""
|
|
706
706
|
Returns a L{Crash} object using the data retrieved from the database.
|
|
707
707
|
|
|
@@ -714,8 +714,7 @@ class CrashDTO (BaseDTO):
|
|
|
714
714
|
"""
|
|
715
715
|
crash = Marshaller.loads(str(self.data))
|
|
716
716
|
if not isinstance(crash, Crash):
|
|
717
|
-
raise TypeError(
|
|
718
|
-
"Expected Crash instance, got %s instead" % type(crash))
|
|
717
|
+
raise TypeError("Expected Crash instance, got %s instead" % type(crash))
|
|
719
718
|
crash._rowid = self.id
|
|
720
719
|
if not crash.memoryMap:
|
|
721
720
|
memory = getattr(self, "memory", [])
|
|
@@ -723,18 +722,20 @@ class CrashDTO (BaseDTO):
|
|
|
723
722
|
crash.memoryMap = [dto.toMBI(getMemoryDump) for dto in memory]
|
|
724
723
|
return crash
|
|
725
724
|
|
|
726
|
-
|
|
725
|
+
|
|
726
|
+
# ==============================================================================
|
|
727
727
|
|
|
728
728
|
# TODO: add a method to modify already stored crash dumps.
|
|
729
729
|
|
|
730
|
-
|
|
730
|
+
|
|
731
|
+
class CrashDAO(BaseDAO):
|
|
731
732
|
"""
|
|
732
733
|
Data Access Object to read, write and search for L{Crash} objects in a
|
|
733
734
|
database.
|
|
734
735
|
"""
|
|
735
736
|
|
|
736
737
|
@Transactional
|
|
737
|
-
def add(self, crash, allow_duplicates
|
|
738
|
+
def add(self, crash, allow_duplicates=True):
|
|
738
739
|
"""
|
|
739
740
|
Add a new crash dump to the database, optionally filtering them by
|
|
740
741
|
signature to avoid duplicates.
|
|
@@ -757,10 +758,8 @@ class CrashDAO (BaseDAO):
|
|
|
757
758
|
|
|
758
759
|
# Filter out duplicated crashes, if requested.
|
|
759
760
|
if not allow_duplicates:
|
|
760
|
-
signature = pickle.dumps(crash.signature, protocol
|
|
761
|
-
if self._session.query(CrashDTO.id)
|
|
762
|
-
.filter_by(signature = signature) \
|
|
763
|
-
.count() > 0:
|
|
761
|
+
signature = pickle.dumps(crash.signature, protocol=0)
|
|
762
|
+
if self._session.query(CrashDTO.id).filter_by(signature=signature).count() > 0:
|
|
764
763
|
return
|
|
765
764
|
|
|
766
765
|
# Fill out a new row for the crashes table.
|
|
@@ -779,7 +778,6 @@ class CrashDAO (BaseDAO):
|
|
|
779
778
|
session = self._session
|
|
780
779
|
r_crash = None
|
|
781
780
|
try:
|
|
782
|
-
|
|
783
781
|
# Fill out a new row for the crashes table.
|
|
784
782
|
r_crash = CrashDTO(crash)
|
|
785
783
|
session.add(r_crash)
|
|
@@ -790,13 +788,11 @@ class CrashDAO (BaseDAO):
|
|
|
790
788
|
|
|
791
789
|
finally:
|
|
792
790
|
try:
|
|
793
|
-
|
|
794
791
|
# Make the ORM forget the CrashDTO object.
|
|
795
792
|
if r_crash is not None:
|
|
796
793
|
session.expire(r_crash)
|
|
797
794
|
|
|
798
795
|
finally:
|
|
799
|
-
|
|
800
796
|
# Delete the last reference to the CrashDTO
|
|
801
797
|
# object, so the Python garbage collector claims it.
|
|
802
798
|
del r_crash
|
|
@@ -814,10 +810,7 @@ class CrashDAO (BaseDAO):
|
|
|
814
810
|
session.flush()
|
|
815
811
|
|
|
816
812
|
@Transactional
|
|
817
|
-
def find(self,
|
|
818
|
-
signature = None, order = 0,
|
|
819
|
-
since = None, until = None,
|
|
820
|
-
offset = None, limit = None):
|
|
813
|
+
def find(self, signature=None, order=0, since=None, until=None, offset=None, limit=None):
|
|
821
814
|
"""
|
|
822
815
|
Retrieve all crash dumps in the database, optionally filtering them by
|
|
823
816
|
signature and timestamp, and/or sorting them by timestamp.
|
|
@@ -857,18 +850,16 @@ class CrashDAO (BaseDAO):
|
|
|
857
850
|
|
|
858
851
|
# Validate the parameters.
|
|
859
852
|
if since and until and since > until:
|
|
860
|
-
warnings.warn("CrashDAO.find() got the 'since' and 'until'"
|
|
861
|
-
" arguments reversed, corrected automatically.")
|
|
853
|
+
warnings.warn("CrashDAO.find() got the 'since' and 'until'" " arguments reversed, corrected automatically.")
|
|
862
854
|
since, until = until, since
|
|
863
855
|
if limit is not None and not limit:
|
|
864
|
-
warnings.warn("CrashDAO.find() was set a limit of 0 results,"
|
|
865
|
-
" returning without executing a query.")
|
|
856
|
+
warnings.warn("CrashDAO.find() was set a limit of 0 results," " returning without executing a query.")
|
|
866
857
|
return []
|
|
867
858
|
|
|
868
859
|
# Build the SQL query.
|
|
869
860
|
query = self._session.query(CrashDTO)
|
|
870
861
|
if signature is not None:
|
|
871
|
-
sig_pickled = pickle.dumps(signature, protocol
|
|
862
|
+
sig_pickled = pickle.dumps(signature, protocol=0)
|
|
872
863
|
query = query.filter(CrashDTO.signature == sig_pickled)
|
|
873
864
|
if since:
|
|
874
865
|
query = query.filter(CrashDTO.timestamp >= since)
|
|
@@ -895,7 +886,7 @@ class CrashDAO (BaseDAO):
|
|
|
895
886
|
return []
|
|
896
887
|
|
|
897
888
|
@Transactional
|
|
898
|
-
def find_by_example(self, crash, offset
|
|
889
|
+
def find_by_example(self, crash, offset=None, limit=None):
|
|
899
890
|
"""
|
|
900
891
|
Find all crash dumps that have common properties with the crash dump
|
|
901
892
|
provided.
|
|
@@ -924,8 +915,7 @@ class CrashDAO (BaseDAO):
|
|
|
924
915
|
|
|
925
916
|
# Validate the parameters.
|
|
926
917
|
if limit is not None and not limit:
|
|
927
|
-
warnings.warn("CrashDAO.find_by_example() was set a limit of 0"
|
|
928
|
-
" results, returning without executing a query.")
|
|
918
|
+
warnings.warn("CrashDAO.find_by_example() was set a limit of 0" " results, returning without executing a query.")
|
|
929
919
|
return []
|
|
930
920
|
|
|
931
921
|
# Build the query.
|
|
@@ -941,9 +931,7 @@ class CrashDAO (BaseDAO):
|
|
|
941
931
|
# Filter all the fields in the crashes table that are present in the
|
|
942
932
|
# CrashDTO object and not set to None, except for the row ID.
|
|
943
933
|
for name, column in compat.iteritems(CrashDTO.__dict__):
|
|
944
|
-
if not name.startswith(
|
|
945
|
-
'signature',
|
|
946
|
-
'data'):
|
|
934
|
+
if not name.startswith("__") and name not in ("id", "signature", "data"):
|
|
947
935
|
if isinstance(column, Column):
|
|
948
936
|
value = getattr(dto, name, None)
|
|
949
937
|
if value is not None:
|
|
@@ -962,7 +950,7 @@ class CrashDAO (BaseDAO):
|
|
|
962
950
|
return []
|
|
963
951
|
|
|
964
952
|
@Transactional
|
|
965
|
-
def count(self, signature
|
|
953
|
+
def count(self, signature=None):
|
|
966
954
|
"""
|
|
967
955
|
Counts how many crash dumps have been stored in this database.
|
|
968
956
|
Optionally filters the count by heuristic signature.
|
|
@@ -976,8 +964,8 @@ class CrashDAO (BaseDAO):
|
|
|
976
964
|
"""
|
|
977
965
|
query = self._session.query(CrashDTO.id)
|
|
978
966
|
if signature:
|
|
979
|
-
sig_pickled = pickle.dumps(signature, protocol
|
|
980
|
-
query = query.filter_by(signature
|
|
967
|
+
sig_pickled = pickle.dumps(signature, protocol=0)
|
|
968
|
+
query = query.filter_by(signature=sig_pickled)
|
|
981
969
|
return query.count()
|
|
982
970
|
|
|
983
971
|
@Transactional
|
|
@@ -988,6 +976,6 @@ class CrashDAO (BaseDAO):
|
|
|
988
976
|
@type crash: L{Crash}
|
|
989
977
|
@param crash: Crash dump to remove.
|
|
990
978
|
"""
|
|
991
|
-
query = self._session.query(CrashDTO).filter_by(id
|
|
992
|
-
query.delete(synchronize_session
|
|
979
|
+
query = self._session.query(CrashDTO).filter_by(id=crash._rowid)
|
|
980
|
+
query.delete(synchronize_session=False)
|
|
993
981
|
del crash._rowid
|