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
|
@@ -58,38 +58,32 @@ Event handling module.
|
|
|
58
58
|
__revision__ = "$Id$"
|
|
59
59
|
|
|
60
60
|
__all__ = [
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
'LoadDLLEvent',
|
|
88
|
-
'UnloadDLLEvent',
|
|
89
|
-
'OutputDebugStringEvent',
|
|
90
|
-
'RIPEvent',
|
|
91
|
-
'ExceptionEvent'
|
|
92
|
-
]
|
|
61
|
+
# Factory of Event objects and all of it's subclasses.
|
|
62
|
+
# Users should not need to instance Event objects directly.
|
|
63
|
+
"EventFactory",
|
|
64
|
+
# Event dispatcher used internally by the Debug class.
|
|
65
|
+
"EventDispatcher",
|
|
66
|
+
# Base classes for user-defined event handlers.
|
|
67
|
+
"EventHandler",
|
|
68
|
+
"EventSift",
|
|
69
|
+
# Warning for uncaught exceptions on event callbacks.
|
|
70
|
+
"EventCallbackWarning",
|
|
71
|
+
# Dummy event object that can be used as a placeholder.
|
|
72
|
+
# It's never returned by the EventFactory.
|
|
73
|
+
"NoEvent",
|
|
74
|
+
# Base class for event objects.
|
|
75
|
+
"Event",
|
|
76
|
+
# Event objects.
|
|
77
|
+
"CreateProcessEvent",
|
|
78
|
+
"CreateThreadEvent",
|
|
79
|
+
"ExitProcessEvent",
|
|
80
|
+
"ExitThreadEvent",
|
|
81
|
+
"LoadDLLEvent",
|
|
82
|
+
"UnloadDLLEvent",
|
|
83
|
+
"OutputDebugStringEvent",
|
|
84
|
+
"RIPEvent",
|
|
85
|
+
"ExceptionEvent",
|
|
86
|
+
]
|
|
93
87
|
|
|
94
88
|
from winappdbg import win32
|
|
95
89
|
from winappdbg import compat
|
|
@@ -106,17 +100,20 @@ import ctypes
|
|
|
106
100
|
import warnings
|
|
107
101
|
import traceback
|
|
108
102
|
|
|
109
|
-
|
|
103
|
+
# ==============================================================================
|
|
110
104
|
|
|
111
|
-
|
|
105
|
+
|
|
106
|
+
class EventCallbackWarning(RuntimeWarning):
|
|
112
107
|
"""
|
|
113
108
|
This warning is issued when an uncaught exception was raised by a
|
|
114
109
|
user-defined event handler.
|
|
115
110
|
"""
|
|
116
111
|
|
|
117
|
-
#==============================================================================
|
|
118
112
|
|
|
119
|
-
|
|
113
|
+
# ==============================================================================
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class Event(object):
|
|
120
117
|
"""
|
|
121
118
|
Event object.
|
|
122
119
|
|
|
@@ -146,9 +143,9 @@ class Event (object):
|
|
|
146
143
|
Continue status to pass to L{win32.ContinueDebugEvent}.
|
|
147
144
|
"""
|
|
148
145
|
|
|
149
|
-
eventMethod
|
|
150
|
-
eventName
|
|
151
|
-
eventDescription =
|
|
146
|
+
eventMethod = "unknown_event"
|
|
147
|
+
eventName = "Unknown event"
|
|
148
|
+
eventDescription = "A debug event of an unknown type has occured."
|
|
152
149
|
|
|
153
150
|
def __init__(self, debug, raw):
|
|
154
151
|
"""
|
|
@@ -158,18 +155,18 @@ class Event (object):
|
|
|
158
155
|
@type raw: L{DEBUG_EVENT}
|
|
159
156
|
@param raw: Raw DEBUG_EVENT structure as used by the Win32 API.
|
|
160
157
|
"""
|
|
161
|
-
self.debug
|
|
162
|
-
self.raw
|
|
158
|
+
self.debug = debug
|
|
159
|
+
self.raw = raw
|
|
163
160
|
self.continueStatus = win32.DBG_EXCEPTION_NOT_HANDLED
|
|
164
161
|
|
|
165
|
-
## @property
|
|
166
|
-
## def debug(self):
|
|
167
|
-
## """
|
|
168
|
-
## @rtype debug: L{Debug}
|
|
169
|
-
## @return debug:
|
|
170
|
-
## Debug object that received the event.
|
|
171
|
-
## """
|
|
172
|
-
## return self.__debug()
|
|
162
|
+
## @property
|
|
163
|
+
## def debug(self):
|
|
164
|
+
## """
|
|
165
|
+
## @rtype debug: L{Debug}
|
|
166
|
+
## @return debug:
|
|
167
|
+
## Debug object that received the event.
|
|
168
|
+
## """
|
|
169
|
+
## return self.__debug()
|
|
173
170
|
|
|
174
171
|
def get_event_name(self):
|
|
175
172
|
"""
|
|
@@ -192,18 +189,18 @@ class Event (object):
|
|
|
192
189
|
"""
|
|
193
190
|
return self.raw.dwDebugEventCode
|
|
194
191
|
|
|
195
|
-
## # Compatibility with version 1.0
|
|
196
|
-
## # XXX to be removed in version 1.4
|
|
197
|
-
## def get_code(self):
|
|
198
|
-
## """
|
|
199
|
-
## Alias of L{get_event_code} for backwards compatibility
|
|
200
|
-
## with WinAppDbg version 1.0.
|
|
201
|
-
## Will be phased out in the next version.
|
|
202
|
-
##
|
|
203
|
-
## @rtype: int
|
|
204
|
-
## @return: Debug event code as defined in the Win32 API.
|
|
205
|
-
## """
|
|
206
|
-
## return self.get_event_code()
|
|
192
|
+
## # Compatibility with version 1.0
|
|
193
|
+
## # XXX to be removed in version 1.4
|
|
194
|
+
## def get_code(self):
|
|
195
|
+
## """
|
|
196
|
+
## Alias of L{get_event_code} for backwards compatibility
|
|
197
|
+
## with WinAppDbg version 1.0.
|
|
198
|
+
## Will be phased out in the next version.
|
|
199
|
+
##
|
|
200
|
+
## @rtype: int
|
|
201
|
+
## @return: Debug event code as defined in the Win32 API.
|
|
202
|
+
## """
|
|
203
|
+
## return self.get_event_code()
|
|
207
204
|
|
|
208
205
|
def get_pid(self):
|
|
209
206
|
"""
|
|
@@ -230,8 +227,8 @@ class Event (object):
|
|
|
230
227
|
@rtype: L{Process}
|
|
231
228
|
@return: Process where the event occured.
|
|
232
229
|
"""
|
|
233
|
-
pid
|
|
234
|
-
system
|
|
230
|
+
pid = self.get_pid()
|
|
231
|
+
system = self.debug.system
|
|
235
232
|
if system.has_process(pid):
|
|
236
233
|
process = system.get_process(pid)
|
|
237
234
|
else:
|
|
@@ -239,7 +236,7 @@ class Event (object):
|
|
|
239
236
|
# The process object was missing for some reason, so make a new one.
|
|
240
237
|
process = Process(pid)
|
|
241
238
|
system._add_process(process)
|
|
242
|
-
## process.scan_threads() # not needed
|
|
239
|
+
## process.scan_threads() # not needed
|
|
243
240
|
process.scan_modules()
|
|
244
241
|
return process
|
|
245
242
|
|
|
@@ -250,7 +247,7 @@ class Event (object):
|
|
|
250
247
|
@rtype: L{Thread}
|
|
251
248
|
@return: Thread where the event occured.
|
|
252
249
|
"""
|
|
253
|
-
tid
|
|
250
|
+
tid = self.get_tid()
|
|
254
251
|
process = self.get_process()
|
|
255
252
|
if process.has_thread(tid):
|
|
256
253
|
thread = process.get_thread(tid)
|
|
@@ -261,9 +258,11 @@ class Event (object):
|
|
|
261
258
|
process._add_thread(thread)
|
|
262
259
|
return thread
|
|
263
260
|
|
|
264
|
-
#==============================================================================
|
|
265
261
|
|
|
266
|
-
|
|
262
|
+
# ==============================================================================
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
class NoEvent(Event):
|
|
267
266
|
"""
|
|
268
267
|
No event.
|
|
269
268
|
|
|
@@ -271,11 +270,11 @@ class NoEvent (Event):
|
|
|
271
270
|
event has occured yet. It's never returned by the L{EventFactory}.
|
|
272
271
|
"""
|
|
273
272
|
|
|
274
|
-
eventMethod
|
|
275
|
-
eventName
|
|
276
|
-
eventDescription =
|
|
273
|
+
eventMethod = "no_event"
|
|
274
|
+
eventName = "No event"
|
|
275
|
+
eventDescription = "No debug event has occured."
|
|
277
276
|
|
|
278
|
-
def __init__(self, debug, raw
|
|
277
|
+
def __init__(self, debug, raw=None):
|
|
279
278
|
Event.__init__(self, debug, raw)
|
|
280
279
|
|
|
281
280
|
def __len__(self):
|
|
@@ -301,9 +300,11 @@ class NoEvent (Event):
|
|
|
301
300
|
def get_thread(self):
|
|
302
301
|
return Thread(self.get_tid())
|
|
303
302
|
|
|
304
|
-
#==============================================================================
|
|
305
303
|
|
|
306
|
-
|
|
304
|
+
# ==============================================================================
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
class ExceptionEvent(Event):
|
|
307
308
|
"""
|
|
308
309
|
Exception event.
|
|
309
310
|
|
|
@@ -330,103 +331,102 @@ class ExceptionEvent (Event):
|
|
|
330
331
|
handler.
|
|
331
332
|
"""
|
|
332
333
|
|
|
333
|
-
eventName
|
|
334
|
-
eventDescription =
|
|
334
|
+
eventName = "Exception event"
|
|
335
|
+
eventDescription = "An exception was raised by the debugee."
|
|
335
336
|
|
|
336
337
|
__exceptionMethod = {
|
|
337
|
-
win32.EXCEPTION_ACCESS_VIOLATION
|
|
338
|
-
win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED
|
|
339
|
-
win32.EXCEPTION_BREAKPOINT
|
|
340
|
-
win32.EXCEPTION_DATATYPE_MISALIGNMENT
|
|
341
|
-
win32.EXCEPTION_FLT_DENORMAL_OPERAND
|
|
342
|
-
win32.EXCEPTION_FLT_DIVIDE_BY_ZERO
|
|
343
|
-
win32.EXCEPTION_FLT_INEXACT_RESULT
|
|
344
|
-
win32.EXCEPTION_FLT_INVALID_OPERATION
|
|
345
|
-
win32.EXCEPTION_FLT_OVERFLOW
|
|
346
|
-
win32.EXCEPTION_FLT_STACK_CHECK
|
|
347
|
-
win32.EXCEPTION_FLT_UNDERFLOW
|
|
348
|
-
win32.EXCEPTION_ILLEGAL_INSTRUCTION
|
|
349
|
-
win32.EXCEPTION_IN_PAGE_ERROR
|
|
350
|
-
win32.EXCEPTION_INT_DIVIDE_BY_ZERO
|
|
351
|
-
win32.EXCEPTION_INT_OVERFLOW
|
|
352
|
-
win32.EXCEPTION_INVALID_DISPOSITION
|
|
353
|
-
win32.EXCEPTION_NONCONTINUABLE_EXCEPTION
|
|
354
|
-
win32.EXCEPTION_PRIV_INSTRUCTION
|
|
355
|
-
win32.EXCEPTION_SINGLE_STEP
|
|
356
|
-
win32.EXCEPTION_STACK_OVERFLOW
|
|
357
|
-
win32.EXCEPTION_GUARD_PAGE
|
|
358
|
-
win32.EXCEPTION_INVALID_HANDLE
|
|
359
|
-
win32.EXCEPTION_POSSIBLE_DEADLOCK
|
|
360
|
-
win32.EXCEPTION_WX86_BREAKPOINT
|
|
361
|
-
win32.CONTROL_C_EXIT
|
|
362
|
-
win32.DBG_CONTROL_C
|
|
363
|
-
win32.MS_VC_EXCEPTION
|
|
338
|
+
win32.EXCEPTION_ACCESS_VIOLATION: "access_violation",
|
|
339
|
+
win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED: "array_bounds_exceeded",
|
|
340
|
+
win32.EXCEPTION_BREAKPOINT: "breakpoint",
|
|
341
|
+
win32.EXCEPTION_DATATYPE_MISALIGNMENT: "datatype_misalignment",
|
|
342
|
+
win32.EXCEPTION_FLT_DENORMAL_OPERAND: "float_denormal_operand",
|
|
343
|
+
win32.EXCEPTION_FLT_DIVIDE_BY_ZERO: "float_divide_by_zero",
|
|
344
|
+
win32.EXCEPTION_FLT_INEXACT_RESULT: "float_inexact_result",
|
|
345
|
+
win32.EXCEPTION_FLT_INVALID_OPERATION: "float_invalid_operation",
|
|
346
|
+
win32.EXCEPTION_FLT_OVERFLOW: "float_overflow",
|
|
347
|
+
win32.EXCEPTION_FLT_STACK_CHECK: "float_stack_check",
|
|
348
|
+
win32.EXCEPTION_FLT_UNDERFLOW: "float_underflow",
|
|
349
|
+
win32.EXCEPTION_ILLEGAL_INSTRUCTION: "illegal_instruction",
|
|
350
|
+
win32.EXCEPTION_IN_PAGE_ERROR: "in_page_error",
|
|
351
|
+
win32.EXCEPTION_INT_DIVIDE_BY_ZERO: "integer_divide_by_zero",
|
|
352
|
+
win32.EXCEPTION_INT_OVERFLOW: "integer_overflow",
|
|
353
|
+
win32.EXCEPTION_INVALID_DISPOSITION: "invalid_disposition",
|
|
354
|
+
win32.EXCEPTION_NONCONTINUABLE_EXCEPTION: "noncontinuable_exception",
|
|
355
|
+
win32.EXCEPTION_PRIV_INSTRUCTION: "privileged_instruction",
|
|
356
|
+
win32.EXCEPTION_SINGLE_STEP: "single_step",
|
|
357
|
+
win32.EXCEPTION_STACK_OVERFLOW: "stack_overflow",
|
|
358
|
+
win32.EXCEPTION_GUARD_PAGE: "guard_page",
|
|
359
|
+
win32.EXCEPTION_INVALID_HANDLE: "invalid_handle",
|
|
360
|
+
win32.EXCEPTION_POSSIBLE_DEADLOCK: "possible_deadlock",
|
|
361
|
+
win32.EXCEPTION_WX86_BREAKPOINT: "wow64_breakpoint",
|
|
362
|
+
win32.CONTROL_C_EXIT: "control_c_exit",
|
|
363
|
+
win32.DBG_CONTROL_C: "debug_control_c",
|
|
364
|
+
win32.MS_VC_EXCEPTION: "ms_vc_exception",
|
|
364
365
|
}
|
|
365
366
|
|
|
366
367
|
__exceptionName = {
|
|
367
|
-
win32.EXCEPTION_ACCESS_VIOLATION
|
|
368
|
-
win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED
|
|
369
|
-
win32.EXCEPTION_BREAKPOINT
|
|
370
|
-
win32.EXCEPTION_DATATYPE_MISALIGNMENT
|
|
371
|
-
win32.EXCEPTION_FLT_DENORMAL_OPERAND
|
|
372
|
-
win32.EXCEPTION_FLT_DIVIDE_BY_ZERO
|
|
373
|
-
win32.EXCEPTION_FLT_INEXACT_RESULT
|
|
374
|
-
win32.EXCEPTION_FLT_INVALID_OPERATION
|
|
375
|
-
win32.EXCEPTION_FLT_OVERFLOW
|
|
376
|
-
win32.EXCEPTION_FLT_STACK_CHECK
|
|
377
|
-
win32.EXCEPTION_FLT_UNDERFLOW
|
|
378
|
-
win32.EXCEPTION_ILLEGAL_INSTRUCTION
|
|
379
|
-
win32.EXCEPTION_IN_PAGE_ERROR
|
|
380
|
-
win32.EXCEPTION_INT_DIVIDE_BY_ZERO
|
|
381
|
-
win32.EXCEPTION_INT_OVERFLOW
|
|
382
|
-
win32.EXCEPTION_INVALID_DISPOSITION
|
|
383
|
-
win32.EXCEPTION_NONCONTINUABLE_EXCEPTION
|
|
384
|
-
win32.EXCEPTION_PRIV_INSTRUCTION
|
|
385
|
-
win32.EXCEPTION_SINGLE_STEP
|
|
386
|
-
win32.EXCEPTION_STACK_OVERFLOW
|
|
387
|
-
win32.EXCEPTION_GUARD_PAGE
|
|
388
|
-
win32.EXCEPTION_INVALID_HANDLE
|
|
389
|
-
win32.EXCEPTION_POSSIBLE_DEADLOCK
|
|
390
|
-
win32.EXCEPTION_WX86_BREAKPOINT
|
|
391
|
-
win32.CONTROL_C_EXIT
|
|
392
|
-
win32.DBG_CONTROL_C
|
|
393
|
-
win32.MS_VC_EXCEPTION
|
|
368
|
+
win32.EXCEPTION_ACCESS_VIOLATION: "EXCEPTION_ACCESS_VIOLATION",
|
|
369
|
+
win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED: "EXCEPTION_ARRAY_BOUNDS_EXCEEDED",
|
|
370
|
+
win32.EXCEPTION_BREAKPOINT: "EXCEPTION_BREAKPOINT",
|
|
371
|
+
win32.EXCEPTION_DATATYPE_MISALIGNMENT: "EXCEPTION_DATATYPE_MISALIGNMENT",
|
|
372
|
+
win32.EXCEPTION_FLT_DENORMAL_OPERAND: "EXCEPTION_FLT_DENORMAL_OPERAND",
|
|
373
|
+
win32.EXCEPTION_FLT_DIVIDE_BY_ZERO: "EXCEPTION_FLT_DIVIDE_BY_ZERO",
|
|
374
|
+
win32.EXCEPTION_FLT_INEXACT_RESULT: "EXCEPTION_FLT_INEXACT_RESULT",
|
|
375
|
+
win32.EXCEPTION_FLT_INVALID_OPERATION: "EXCEPTION_FLT_INVALID_OPERATION",
|
|
376
|
+
win32.EXCEPTION_FLT_OVERFLOW: "EXCEPTION_FLT_OVERFLOW",
|
|
377
|
+
win32.EXCEPTION_FLT_STACK_CHECK: "EXCEPTION_FLT_STACK_CHECK",
|
|
378
|
+
win32.EXCEPTION_FLT_UNDERFLOW: "EXCEPTION_FLT_UNDERFLOW",
|
|
379
|
+
win32.EXCEPTION_ILLEGAL_INSTRUCTION: "EXCEPTION_ILLEGAL_INSTRUCTION",
|
|
380
|
+
win32.EXCEPTION_IN_PAGE_ERROR: "EXCEPTION_IN_PAGE_ERROR",
|
|
381
|
+
win32.EXCEPTION_INT_DIVIDE_BY_ZERO: "EXCEPTION_INT_DIVIDE_BY_ZERO",
|
|
382
|
+
win32.EXCEPTION_INT_OVERFLOW: "EXCEPTION_INT_OVERFLOW",
|
|
383
|
+
win32.EXCEPTION_INVALID_DISPOSITION: "EXCEPTION_INVALID_DISPOSITION",
|
|
384
|
+
win32.EXCEPTION_NONCONTINUABLE_EXCEPTION: "EXCEPTION_NONCONTINUABLE_EXCEPTION",
|
|
385
|
+
win32.EXCEPTION_PRIV_INSTRUCTION: "EXCEPTION_PRIV_INSTRUCTION",
|
|
386
|
+
win32.EXCEPTION_SINGLE_STEP: "EXCEPTION_SINGLE_STEP",
|
|
387
|
+
win32.EXCEPTION_STACK_OVERFLOW: "EXCEPTION_STACK_OVERFLOW",
|
|
388
|
+
win32.EXCEPTION_GUARD_PAGE: "EXCEPTION_GUARD_PAGE",
|
|
389
|
+
win32.EXCEPTION_INVALID_HANDLE: "EXCEPTION_INVALID_HANDLE",
|
|
390
|
+
win32.EXCEPTION_POSSIBLE_DEADLOCK: "EXCEPTION_POSSIBLE_DEADLOCK",
|
|
391
|
+
win32.EXCEPTION_WX86_BREAKPOINT: "EXCEPTION_WX86_BREAKPOINT",
|
|
392
|
+
win32.CONTROL_C_EXIT: "CONTROL_C_EXIT",
|
|
393
|
+
win32.DBG_CONTROL_C: "DBG_CONTROL_C",
|
|
394
|
+
win32.MS_VC_EXCEPTION: "MS_VC_EXCEPTION",
|
|
394
395
|
}
|
|
395
396
|
|
|
396
397
|
__exceptionDescription = {
|
|
397
|
-
win32.EXCEPTION_ACCESS_VIOLATION
|
|
398
|
-
win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED
|
|
399
|
-
win32.EXCEPTION_BREAKPOINT
|
|
400
|
-
win32.EXCEPTION_DATATYPE_MISALIGNMENT
|
|
401
|
-
win32.EXCEPTION_FLT_DENORMAL_OPERAND
|
|
402
|
-
win32.EXCEPTION_FLT_DIVIDE_BY_ZERO
|
|
403
|
-
win32.EXCEPTION_FLT_INEXACT_RESULT
|
|
404
|
-
win32.EXCEPTION_FLT_INVALID_OPERATION
|
|
405
|
-
win32.EXCEPTION_FLT_OVERFLOW
|
|
406
|
-
win32.EXCEPTION_FLT_STACK_CHECK
|
|
407
|
-
win32.EXCEPTION_FLT_UNDERFLOW
|
|
408
|
-
win32.EXCEPTION_ILLEGAL_INSTRUCTION
|
|
409
|
-
win32.EXCEPTION_IN_PAGE_ERROR
|
|
410
|
-
win32.EXCEPTION_INT_DIVIDE_BY_ZERO
|
|
411
|
-
win32.EXCEPTION_INT_OVERFLOW
|
|
412
|
-
win32.EXCEPTION_INVALID_DISPOSITION
|
|
413
|
-
win32.EXCEPTION_NONCONTINUABLE_EXCEPTION
|
|
414
|
-
win32.EXCEPTION_PRIV_INSTRUCTION
|
|
415
|
-
win32.EXCEPTION_SINGLE_STEP
|
|
416
|
-
win32.EXCEPTION_STACK_OVERFLOW
|
|
417
|
-
win32.EXCEPTION_GUARD_PAGE
|
|
418
|
-
win32.EXCEPTION_INVALID_HANDLE
|
|
419
|
-
win32.EXCEPTION_POSSIBLE_DEADLOCK
|
|
420
|
-
win32.EXCEPTION_WX86_BREAKPOINT
|
|
421
|
-
win32.CONTROL_C_EXIT
|
|
422
|
-
win32.DBG_CONTROL_C
|
|
423
|
-
win32.MS_VC_EXCEPTION
|
|
398
|
+
win32.EXCEPTION_ACCESS_VIOLATION: "Access violation",
|
|
399
|
+
win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED: "Array bounds exceeded",
|
|
400
|
+
win32.EXCEPTION_BREAKPOINT: "Breakpoint",
|
|
401
|
+
win32.EXCEPTION_DATATYPE_MISALIGNMENT: "Datatype misalignment",
|
|
402
|
+
win32.EXCEPTION_FLT_DENORMAL_OPERAND: "Float denormal operand",
|
|
403
|
+
win32.EXCEPTION_FLT_DIVIDE_BY_ZERO: "Float divide by zero",
|
|
404
|
+
win32.EXCEPTION_FLT_INEXACT_RESULT: "Float inexact result",
|
|
405
|
+
win32.EXCEPTION_FLT_INVALID_OPERATION: "Float invalid operation",
|
|
406
|
+
win32.EXCEPTION_FLT_OVERFLOW: "Float overflow",
|
|
407
|
+
win32.EXCEPTION_FLT_STACK_CHECK: "Float stack check",
|
|
408
|
+
win32.EXCEPTION_FLT_UNDERFLOW: "Float underflow",
|
|
409
|
+
win32.EXCEPTION_ILLEGAL_INSTRUCTION: "Illegal instruction",
|
|
410
|
+
win32.EXCEPTION_IN_PAGE_ERROR: "In-page error",
|
|
411
|
+
win32.EXCEPTION_INT_DIVIDE_BY_ZERO: "Integer divide by zero",
|
|
412
|
+
win32.EXCEPTION_INT_OVERFLOW: "Integer overflow",
|
|
413
|
+
win32.EXCEPTION_INVALID_DISPOSITION: "Invalid disposition",
|
|
414
|
+
win32.EXCEPTION_NONCONTINUABLE_EXCEPTION: "Noncontinuable exception",
|
|
415
|
+
win32.EXCEPTION_PRIV_INSTRUCTION: "Privileged instruction",
|
|
416
|
+
win32.EXCEPTION_SINGLE_STEP: "Single step event",
|
|
417
|
+
win32.EXCEPTION_STACK_OVERFLOW: "Stack limits overflow",
|
|
418
|
+
win32.EXCEPTION_GUARD_PAGE: "Guard page hit",
|
|
419
|
+
win32.EXCEPTION_INVALID_HANDLE: "Invalid handle",
|
|
420
|
+
win32.EXCEPTION_POSSIBLE_DEADLOCK: "Possible deadlock",
|
|
421
|
+
win32.EXCEPTION_WX86_BREAKPOINT: "WOW64 breakpoint",
|
|
422
|
+
win32.CONTROL_C_EXIT: "Control-C exit",
|
|
423
|
+
win32.DBG_CONTROL_C: "Debug Control-C",
|
|
424
|
+
win32.MS_VC_EXCEPTION: "Microsoft Visual C++ exception",
|
|
424
425
|
}
|
|
425
426
|
|
|
426
427
|
@property
|
|
427
428
|
def eventMethod(self):
|
|
428
|
-
return self.__exceptionMethod.get(
|
|
429
|
-
self.get_exception_code(), 'unknown_exception')
|
|
429
|
+
return self.__exceptionMethod.get(self.get_exception_code(), "unknown_exception")
|
|
430
430
|
|
|
431
431
|
def get_exception_name(self):
|
|
432
432
|
"""
|
|
@@ -434,7 +434,7 @@ class ExceptionEvent (Event):
|
|
|
434
434
|
@return: Name of the exception as defined by the Win32 API.
|
|
435
435
|
"""
|
|
436
436
|
code = self.get_exception_code()
|
|
437
|
-
unk
|
|
437
|
+
unk = HexDump.integer(code)
|
|
438
438
|
return self.__exceptionName.get(code, unk)
|
|
439
439
|
|
|
440
440
|
def get_exception_description(self):
|
|
@@ -446,11 +446,10 @@ class ExceptionEvent (Event):
|
|
|
446
446
|
description = self.__exceptionDescription.get(code, None)
|
|
447
447
|
if description is None:
|
|
448
448
|
try:
|
|
449
|
-
description =
|
|
450
|
-
description = description % (HexDump.integer(code),
|
|
451
|
-
ctypes.FormatError(code))
|
|
449
|
+
description = "Exception code %s (%s)"
|
|
450
|
+
description = description % (HexDump.integer(code), ctypes.FormatError(code))
|
|
452
451
|
except OverflowError:
|
|
453
|
-
description =
|
|
452
|
+
description = "Exception code %s" % HexDump.integer(code)
|
|
454
453
|
return description
|
|
455
454
|
|
|
456
455
|
def is_first_chance(self):
|
|
@@ -478,8 +477,7 @@ class ExceptionEvent (Event):
|
|
|
478
477
|
Attempting to continue a noncontinuable exception results in an
|
|
479
478
|
EXCEPTION_NONCONTINUABLE_EXCEPTION exception to be raised.
|
|
480
479
|
"""
|
|
481
|
-
return bool(
|
|
482
|
-
win32.EXCEPTION_NONCONTINUABLE )
|
|
480
|
+
return bool(self.raw.u.Exception.ExceptionRecord.ExceptionFlags & win32.EXCEPTION_NONCONTINUABLE)
|
|
483
481
|
|
|
484
482
|
def is_continuable(self):
|
|
485
483
|
"""
|
|
@@ -570,8 +568,7 @@ class ExceptionEvent (Event):
|
|
|
570
568
|
|
|
571
569
|
@raise NotImplementedError: Wrong kind of exception.
|
|
572
570
|
"""
|
|
573
|
-
if self.get_exception_code() not in (win32.EXCEPTION_ACCESS_VIOLATION,
|
|
574
|
-
win32.EXCEPTION_IN_PAGE_ERROR, win32.EXCEPTION_GUARD_PAGE):
|
|
571
|
+
if self.get_exception_code() not in (win32.EXCEPTION_ACCESS_VIOLATION, win32.EXCEPTION_IN_PAGE_ERROR, win32.EXCEPTION_GUARD_PAGE):
|
|
575
572
|
msg = "This method is not meaningful for %s."
|
|
576
573
|
raise NotImplementedError(msg % self.get_exception_name())
|
|
577
574
|
return self.get_exception_information(0)
|
|
@@ -586,8 +583,7 @@ class ExceptionEvent (Event):
|
|
|
586
583
|
|
|
587
584
|
@raise NotImplementedError: Wrong kind of exception.
|
|
588
585
|
"""
|
|
589
|
-
if self.get_exception_code() not in (win32.EXCEPTION_ACCESS_VIOLATION,
|
|
590
|
-
win32.EXCEPTION_IN_PAGE_ERROR, win32.EXCEPTION_GUARD_PAGE):
|
|
586
|
+
if self.get_exception_code() not in (win32.EXCEPTION_ACCESS_VIOLATION, win32.EXCEPTION_IN_PAGE_ERROR, win32.EXCEPTION_GUARD_PAGE):
|
|
591
587
|
msg = "This method is not meaningful for %s."
|
|
592
588
|
raise NotImplementedError(msg % self.get_exception_name())
|
|
593
589
|
return self.get_exception_information(1)
|
|
@@ -603,8 +599,7 @@ class ExceptionEvent (Event):
|
|
|
603
599
|
@raise NotImplementedError: Not an in-page memory error.
|
|
604
600
|
"""
|
|
605
601
|
if self.get_exception_code() != win32.EXCEPTION_IN_PAGE_ERROR:
|
|
606
|
-
msg = "This method is only meaningful "
|
|
607
|
-
"for in-page memory error exceptions."
|
|
602
|
+
msg = "This method is only meaningful " "for in-page memory error exceptions."
|
|
608
603
|
raise NotImplementedError(msg)
|
|
609
604
|
return self.get_exception_information(2)
|
|
610
605
|
|
|
@@ -665,37 +660,39 @@ class ExceptionEvent (Event):
|
|
|
665
660
|
# The list always begins with ourselves.
|
|
666
661
|
# Just put a reference to "self" as the first element,
|
|
667
662
|
# and start looping from the second exception record.
|
|
668
|
-
nested = [
|
|
663
|
+
nested = [self]
|
|
669
664
|
raw = self.raw
|
|
670
665
|
dwDebugEventCode = raw.dwDebugEventCode
|
|
671
|
-
dwProcessId
|
|
672
|
-
dwThreadId
|
|
673
|
-
dwFirstChance
|
|
674
|
-
record
|
|
666
|
+
dwProcessId = raw.dwProcessId
|
|
667
|
+
dwThreadId = raw.dwThreadId
|
|
668
|
+
dwFirstChance = raw.u.Exception.dwFirstChance
|
|
669
|
+
record = raw.u.Exception.ExceptionRecord
|
|
675
670
|
while True:
|
|
676
671
|
record = record.ExceptionRecord
|
|
677
672
|
if not record:
|
|
678
673
|
break
|
|
679
674
|
raw = win32.DEBUG_EVENT()
|
|
680
|
-
raw.dwDebugEventCode
|
|
681
|
-
raw.dwProcessId
|
|
682
|
-
raw.dwThreadId
|
|
675
|
+
raw.dwDebugEventCode = dwDebugEventCode
|
|
676
|
+
raw.dwProcessId = dwProcessId
|
|
677
|
+
raw.dwThreadId = dwThreadId
|
|
683
678
|
raw.u.Exception.ExceptionRecord = record
|
|
684
|
-
raw.u.Exception.dwFirstChance
|
|
679
|
+
raw.u.Exception.dwFirstChance = dwFirstChance
|
|
685
680
|
event = EventFactory.get(self.debug, raw)
|
|
686
681
|
nested.append(event)
|
|
687
682
|
return nested
|
|
688
683
|
|
|
689
|
-
#==============================================================================
|
|
690
684
|
|
|
691
|
-
|
|
685
|
+
# ==============================================================================
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
class CreateThreadEvent(Event):
|
|
692
689
|
"""
|
|
693
690
|
Thread creation event.
|
|
694
691
|
"""
|
|
695
692
|
|
|
696
|
-
eventMethod
|
|
697
|
-
eventName
|
|
698
|
-
eventDescription =
|
|
693
|
+
eventMethod = "create_thread"
|
|
694
|
+
eventName = "Thread creation event"
|
|
695
|
+
eventDescription = "A new thread has started."
|
|
699
696
|
|
|
700
697
|
def get_thread_handle(self):
|
|
701
698
|
"""
|
|
@@ -731,16 +728,18 @@ class CreateThreadEvent (Event):
|
|
|
731
728
|
"""
|
|
732
729
|
return self.raw.u.CreateThread.lpStartAddress
|
|
733
730
|
|
|
734
|
-
#==============================================================================
|
|
735
731
|
|
|
736
|
-
|
|
732
|
+
# ==============================================================================
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
class CreateProcessEvent(Event):
|
|
737
736
|
"""
|
|
738
737
|
Process creation event.
|
|
739
738
|
"""
|
|
740
739
|
|
|
741
|
-
eventMethod
|
|
742
|
-
eventName
|
|
743
|
-
eventDescription =
|
|
740
|
+
eventMethod = "create_process"
|
|
741
|
+
eventName = "Process creation event"
|
|
742
|
+
eventDescription = "A new process has started."
|
|
744
743
|
|
|
745
744
|
def get_file_handle(self):
|
|
746
745
|
"""
|
|
@@ -825,8 +824,8 @@ class CreateProcessEvent (Event):
|
|
|
825
824
|
@rtype: str
|
|
826
825
|
@return: Debugging information.
|
|
827
826
|
"""
|
|
828
|
-
raw
|
|
829
|
-
ptr
|
|
827
|
+
raw = self.raw.u.CreateProcessInfo
|
|
828
|
+
ptr = raw.lpBaseOfImage + raw.dwDebugInfoFileOffset
|
|
830
829
|
size = raw.nDebugInfoSize
|
|
831
830
|
data = self.get_process().peek(ptr, size)
|
|
832
831
|
if len(data) == size:
|
|
@@ -847,16 +846,15 @@ class CreateProcessEvent (Event):
|
|
|
847
846
|
if hFile:
|
|
848
847
|
szFilename = hFile.get_filename()
|
|
849
848
|
if not szFilename:
|
|
850
|
-
|
|
851
849
|
# Try to get it from CREATE_PROCESS_DEBUG_INFO.lpImageName
|
|
852
850
|
# It's NULL or *NULL most of the times, see MSDN:
|
|
853
851
|
# http://msdn.microsoft.com/en-us/library/ms679286(VS.85).aspx
|
|
854
852
|
aProcess = self.get_process()
|
|
855
853
|
lpRemoteFilenamePtr = self.raw.u.CreateProcessInfo.lpImageName
|
|
856
854
|
if lpRemoteFilenamePtr:
|
|
857
|
-
lpFilename
|
|
858
|
-
fUnicode
|
|
859
|
-
szFilename
|
|
855
|
+
lpFilename = aProcess.peek_uint(lpRemoteFilenamePtr)
|
|
856
|
+
fUnicode = bool(self.raw.u.CreateProcessInfo.fUnicode)
|
|
857
|
+
szFilename = aProcess.peek_string(lpFilename, fUnicode)
|
|
860
858
|
|
|
861
859
|
# XXX TODO
|
|
862
860
|
# Sometimes the filename is relative (ntdll.dll, kernel32.dll).
|
|
@@ -881,18 +879,20 @@ class CreateProcessEvent (Event):
|
|
|
881
879
|
@rtype: L{Module}
|
|
882
880
|
@return: Main module of the process.
|
|
883
881
|
"""
|
|
884
|
-
return self.get_process().get_module(
|
|
882
|
+
return self.get_process().get_module(self.get_module_base())
|
|
883
|
+
|
|
885
884
|
|
|
886
|
-
|
|
885
|
+
# ==============================================================================
|
|
887
886
|
|
|
888
|
-
|
|
887
|
+
|
|
888
|
+
class ExitThreadEvent(Event):
|
|
889
889
|
"""
|
|
890
890
|
Thread termination event.
|
|
891
891
|
"""
|
|
892
892
|
|
|
893
|
-
eventMethod
|
|
894
|
-
eventName
|
|
895
|
-
eventDescription =
|
|
893
|
+
eventMethod = "exit_thread"
|
|
894
|
+
eventName = "Thread termination event"
|
|
895
|
+
eventDescription = "A thread has finished executing."
|
|
896
896
|
|
|
897
897
|
def get_exit_code(self):
|
|
898
898
|
"""
|
|
@@ -901,16 +901,18 @@ class ExitThreadEvent (Event):
|
|
|
901
901
|
"""
|
|
902
902
|
return self.raw.u.ExitThread.dwExitCode
|
|
903
903
|
|
|
904
|
-
#==============================================================================
|
|
905
904
|
|
|
906
|
-
|
|
905
|
+
# ==============================================================================
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
class ExitProcessEvent(Event):
|
|
907
909
|
"""
|
|
908
910
|
Process termination event.
|
|
909
911
|
"""
|
|
910
912
|
|
|
911
|
-
eventMethod
|
|
912
|
-
eventName
|
|
913
|
-
eventDescription =
|
|
913
|
+
eventMethod = "exit_process"
|
|
914
|
+
eventName = "Process termination event"
|
|
915
|
+
eventDescription = "A process has finished executing."
|
|
914
916
|
|
|
915
917
|
def get_exit_code(self):
|
|
916
918
|
"""
|
|
@@ -948,16 +950,18 @@ class ExitProcessEvent (Event):
|
|
|
948
950
|
"""
|
|
949
951
|
return self.get_process().get_main_module()
|
|
950
952
|
|
|
951
|
-
#==============================================================================
|
|
952
953
|
|
|
953
|
-
|
|
954
|
+
# ==============================================================================
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
class LoadDLLEvent(Event):
|
|
954
958
|
"""
|
|
955
959
|
Module load event.
|
|
956
960
|
"""
|
|
957
961
|
|
|
958
|
-
eventMethod
|
|
959
|
-
eventName
|
|
960
|
-
eventDescription =
|
|
962
|
+
eventMethod = "load_dll"
|
|
963
|
+
eventName = "Module load event"
|
|
964
|
+
eventDescription = "A new DLL library was loaded by the debugee."
|
|
961
965
|
|
|
962
966
|
def get_module_base(self):
|
|
963
967
|
"""
|
|
@@ -972,16 +976,13 @@ class LoadDLLEvent (Event):
|
|
|
972
976
|
@return: Module object for the newly loaded DLL.
|
|
973
977
|
"""
|
|
974
978
|
lpBaseOfDll = self.get_module_base()
|
|
975
|
-
aProcess
|
|
979
|
+
aProcess = self.get_process()
|
|
976
980
|
if aProcess.has_module(lpBaseOfDll):
|
|
977
981
|
aModule = aProcess.get_module(lpBaseOfDll)
|
|
978
982
|
else:
|
|
979
983
|
# XXX HACK
|
|
980
984
|
# For some reason the module object is missing, so make a new one.
|
|
981
|
-
aModule = Module(lpBaseOfDll,
|
|
982
|
-
hFile = self.get_file_handle(),
|
|
983
|
-
fileName = self.get_filename(),
|
|
984
|
-
process = aProcess)
|
|
985
|
+
aModule = Module(lpBaseOfDll, hFile=self.get_file_handle(), fileName=self.get_filename(), process=aProcess)
|
|
985
986
|
aProcess._add_module(aModule)
|
|
986
987
|
return aModule
|
|
987
988
|
|
|
@@ -1020,9 +1021,9 @@ class LoadDLLEvent (Event):
|
|
|
1020
1021
|
aProcess = self.get_process()
|
|
1021
1022
|
lpRemoteFilenamePtr = self.raw.u.LoadDll.lpImageName
|
|
1022
1023
|
if lpRemoteFilenamePtr:
|
|
1023
|
-
lpFilename
|
|
1024
|
-
fUnicode
|
|
1025
|
-
szFilename
|
|
1024
|
+
lpFilename = aProcess.peek_uint(lpRemoteFilenamePtr)
|
|
1025
|
+
fUnicode = bool(self.raw.u.LoadDll.fUnicode)
|
|
1026
|
+
szFilename = aProcess.peek_string(lpFilename, fUnicode)
|
|
1026
1027
|
if not szFilename:
|
|
1027
1028
|
szFilename = None
|
|
1028
1029
|
|
|
@@ -1035,16 +1036,18 @@ class LoadDLLEvent (Event):
|
|
|
1035
1036
|
# Return the filename, or None on error.
|
|
1036
1037
|
return szFilename
|
|
1037
1038
|
|
|
1038
|
-
#==============================================================================
|
|
1039
1039
|
|
|
1040
|
-
|
|
1040
|
+
# ==============================================================================
|
|
1041
|
+
|
|
1042
|
+
|
|
1043
|
+
class UnloadDLLEvent(Event):
|
|
1041
1044
|
"""
|
|
1042
1045
|
Module unload event.
|
|
1043
1046
|
"""
|
|
1044
1047
|
|
|
1045
|
-
eventMethod
|
|
1046
|
-
eventName
|
|
1047
|
-
eventDescription =
|
|
1048
|
+
eventMethod = "unload_dll"
|
|
1049
|
+
eventName = "Module unload event"
|
|
1050
|
+
eventDescription = "A DLL library was unloaded by the debugee."
|
|
1048
1051
|
|
|
1049
1052
|
def get_module_base(self):
|
|
1050
1053
|
"""
|
|
@@ -1059,11 +1062,11 @@ class UnloadDLLEvent (Event):
|
|
|
1059
1062
|
@return: Module object for the recently unloaded DLL.
|
|
1060
1063
|
"""
|
|
1061
1064
|
lpBaseOfDll = self.get_module_base()
|
|
1062
|
-
aProcess
|
|
1065
|
+
aProcess = self.get_process()
|
|
1063
1066
|
if aProcess.has_module(lpBaseOfDll):
|
|
1064
1067
|
aModule = aProcess.get_module(lpBaseOfDll)
|
|
1065
1068
|
else:
|
|
1066
|
-
aModule = Module(lpBaseOfDll, process
|
|
1069
|
+
aModule = Module(lpBaseOfDll, process=aProcess)
|
|
1067
1070
|
aProcess._add_module(aModule)
|
|
1068
1071
|
return aModule
|
|
1069
1072
|
|
|
@@ -1086,16 +1089,18 @@ class UnloadDLLEvent (Event):
|
|
|
1086
1089
|
"""
|
|
1087
1090
|
return self.get_module().get_filename()
|
|
1088
1091
|
|
|
1089
|
-
#==============================================================================
|
|
1090
1092
|
|
|
1091
|
-
|
|
1093
|
+
# ==============================================================================
|
|
1094
|
+
|
|
1095
|
+
|
|
1096
|
+
class OutputDebugStringEvent(Event):
|
|
1092
1097
|
"""
|
|
1093
1098
|
Debug string output event.
|
|
1094
1099
|
"""
|
|
1095
1100
|
|
|
1096
|
-
eventMethod
|
|
1097
|
-
eventName
|
|
1098
|
-
eventDescription =
|
|
1101
|
+
eventMethod = "output_string"
|
|
1102
|
+
eventName = "Debug string output event"
|
|
1103
|
+
eventDescription = "The debugee sent a message to the debugger."
|
|
1099
1104
|
|
|
1100
1105
|
def get_debug_string(self):
|
|
1101
1106
|
"""
|
|
@@ -1104,21 +1109,21 @@ class OutputDebugStringEvent (Event):
|
|
|
1104
1109
|
It may be ANSI or Unicode and may end with a null character.
|
|
1105
1110
|
"""
|
|
1106
1111
|
return self.get_process().peek_string(
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
self.raw.u.DebugString.nDebugStringLength)
|
|
1112
|
+
self.raw.u.DebugString.lpDebugStringData, bool(self.raw.u.DebugString.fUnicode), self.raw.u.DebugString.nDebugStringLength
|
|
1113
|
+
)
|
|
1110
1114
|
|
|
1111
|
-
#==============================================================================
|
|
1112
1115
|
|
|
1113
|
-
|
|
1116
|
+
# ==============================================================================
|
|
1117
|
+
|
|
1118
|
+
|
|
1119
|
+
class RIPEvent(Event):
|
|
1114
1120
|
"""
|
|
1115
1121
|
RIP event.
|
|
1116
1122
|
"""
|
|
1117
1123
|
|
|
1118
|
-
eventMethod
|
|
1119
|
-
eventName
|
|
1120
|
-
eventDescription =
|
|
1121
|
-
'can no longer be debugged.'
|
|
1124
|
+
eventMethod = "rip"
|
|
1125
|
+
eventName = "RIP event"
|
|
1126
|
+
eventDescription = "An error has occured and the process " "can no longer be debugged."
|
|
1122
1127
|
|
|
1123
1128
|
def get_rip_error(self):
|
|
1124
1129
|
"""
|
|
@@ -1138,9 +1143,11 @@ class RIPEvent (Event):
|
|
|
1138
1143
|
"""
|
|
1139
1144
|
return self.raw.u.RipInfo.dwType
|
|
1140
1145
|
|
|
1141
|
-
#==============================================================================
|
|
1142
1146
|
|
|
1143
|
-
|
|
1147
|
+
# ==============================================================================
|
|
1148
|
+
|
|
1149
|
+
|
|
1150
|
+
class EventFactory(StaticClass):
|
|
1144
1151
|
"""
|
|
1145
1152
|
Factory of L{Event} objects.
|
|
1146
1153
|
|
|
@@ -1154,17 +1161,17 @@ class EventFactory (StaticClass):
|
|
|
1154
1161
|
Dictionary that maps event codes to L{Event} subclasses.
|
|
1155
1162
|
"""
|
|
1156
1163
|
|
|
1157
|
-
baseEvent
|
|
1164
|
+
baseEvent = Event
|
|
1158
1165
|
eventClasses = {
|
|
1159
|
-
win32.EXCEPTION_DEBUG_EVENT
|
|
1160
|
-
win32.CREATE_THREAD_DEBUG_EVENT
|
|
1161
|
-
win32.CREATE_PROCESS_DEBUG_EVENT
|
|
1162
|
-
win32.EXIT_THREAD_DEBUG_EVENT
|
|
1163
|
-
win32.EXIT_PROCESS_DEBUG_EVENT
|
|
1164
|
-
win32.LOAD_DLL_DEBUG_EVENT
|
|
1165
|
-
win32.UNLOAD_DLL_DEBUG_EVENT
|
|
1166
|
-
win32.OUTPUT_DEBUG_STRING_EVENT
|
|
1167
|
-
win32.RIP_EVENT
|
|
1166
|
+
win32.EXCEPTION_DEBUG_EVENT: ExceptionEvent, # 1
|
|
1167
|
+
win32.CREATE_THREAD_DEBUG_EVENT: CreateThreadEvent, # 2
|
|
1168
|
+
win32.CREATE_PROCESS_DEBUG_EVENT: CreateProcessEvent, # 3
|
|
1169
|
+
win32.EXIT_THREAD_DEBUG_EVENT: ExitThreadEvent, # 4
|
|
1170
|
+
win32.EXIT_PROCESS_DEBUG_EVENT: ExitProcessEvent, # 5
|
|
1171
|
+
win32.LOAD_DLL_DEBUG_EVENT: LoadDLLEvent, # 6
|
|
1172
|
+
win32.UNLOAD_DLL_DEBUG_EVENT: UnloadDLLEvent, # 7
|
|
1173
|
+
win32.OUTPUT_DEBUG_STRING_EVENT: OutputDebugStringEvent, # 8
|
|
1174
|
+
win32.RIP_EVENT: RIPEvent, # 9
|
|
1168
1175
|
}
|
|
1169
1176
|
|
|
1170
1177
|
@classmethod
|
|
@@ -1183,9 +1190,11 @@ class EventFactory (StaticClass):
|
|
|
1183
1190
|
eventClass = cls.eventClasses.get(raw.dwDebugEventCode, cls.baseEvent)
|
|
1184
1191
|
return eventClass(debug, raw)
|
|
1185
1192
|
|
|
1186
|
-
#==============================================================================
|
|
1187
1193
|
|
|
1188
|
-
|
|
1194
|
+
# ==============================================================================
|
|
1195
|
+
|
|
1196
|
+
|
|
1197
|
+
class EventHandler(object):
|
|
1189
1198
|
"""
|
|
1190
1199
|
Base class for debug event handlers.
|
|
1191
1200
|
|
|
@@ -1360,7 +1369,7 @@ class EventHandler (object):
|
|
|
1360
1369
|
return value from the hooked function.
|
|
1361
1370
|
"""
|
|
1362
1371
|
|
|
1363
|
-
|
|
1372
|
+
# ------------------------------------------------------------------------------
|
|
1364
1373
|
|
|
1365
1374
|
# Default (empty) API hooks dictionary.
|
|
1366
1375
|
apiHooks = {}
|
|
@@ -1403,9 +1412,9 @@ class EventHandler (object):
|
|
|
1403
1412
|
hook_objs = []
|
|
1404
1413
|
for proc, args in hooks:
|
|
1405
1414
|
if type(args) in (int, long):
|
|
1406
|
-
h = ApiHook(self, lib, proc, paramCount
|
|
1415
|
+
h = ApiHook(self, lib, proc, paramCount=args)
|
|
1407
1416
|
else:
|
|
1408
|
-
h = ApiHook(self, lib, proc,
|
|
1417
|
+
h = ApiHook(self, lib, proc, signature=args)
|
|
1409
1418
|
hook_objs.append(h)
|
|
1410
1419
|
apiHooks[lib] = hook_objs
|
|
1411
1420
|
self.__apiHooks = apiHooks
|
|
@@ -1433,7 +1442,7 @@ class EventHandler (object):
|
|
|
1433
1442
|
This method is called automatically whenever a DLL is loaded.
|
|
1434
1443
|
"""
|
|
1435
1444
|
debug = event.debug
|
|
1436
|
-
pid
|
|
1445
|
+
pid = event.get_pid()
|
|
1437
1446
|
for hook_api_stub in self.__get_hooks_for_dll(event):
|
|
1438
1447
|
hook_api_stub.hook(debug, pid)
|
|
1439
1448
|
|
|
@@ -1444,7 +1453,7 @@ class EventHandler (object):
|
|
|
1444
1453
|
This method is called automatically whenever a DLL is unloaded.
|
|
1445
1454
|
"""
|
|
1446
1455
|
debug = event.debug
|
|
1447
|
-
pid
|
|
1456
|
+
pid = event.get_pid()
|
|
1448
1457
|
for hook_api_stub in self.__get_hooks_for_dll(event):
|
|
1449
1458
|
hook_api_stub.unhook(debug, pid)
|
|
1450
1459
|
|
|
@@ -1468,7 +1477,8 @@ class EventHandler (object):
|
|
|
1468
1477
|
if method is not None:
|
|
1469
1478
|
return method(event)
|
|
1470
1479
|
|
|
1471
|
-
|
|
1480
|
+
|
|
1481
|
+
# ==============================================================================
|
|
1472
1482
|
|
|
1473
1483
|
# TODO
|
|
1474
1484
|
# * Make it more generic by adding a few more callbacks.
|
|
@@ -1476,6 +1486,7 @@ class EventHandler (object):
|
|
|
1476
1486
|
# * This interface feels too much like an antipattern.
|
|
1477
1487
|
# When apiHooks is deprecated this will have to be reviewed.
|
|
1478
1488
|
|
|
1489
|
+
|
|
1479
1490
|
class EventSift(EventHandler):
|
|
1480
1491
|
"""
|
|
1481
1492
|
Event handler that allows you to use customized event handlers for each
|
|
@@ -1598,9 +1609,9 @@ class EventSift(EventHandler):
|
|
|
1598
1609
|
the event forwarder will be passed on to the constructor of this
|
|
1599
1610
|
class as well.
|
|
1600
1611
|
"""
|
|
1601
|
-
self.cls
|
|
1602
|
-
self.argv
|
|
1603
|
-
self.argd
|
|
1612
|
+
self.cls = cls
|
|
1613
|
+
self.argv = argv
|
|
1614
|
+
self.argd = argd
|
|
1604
1615
|
self.forward = dict()
|
|
1605
1616
|
super(EventSift, self).__init__()
|
|
1606
1617
|
|
|
@@ -1609,8 +1620,7 @@ class EventSift(EventHandler):
|
|
|
1609
1620
|
def __call__(self, event):
|
|
1610
1621
|
try:
|
|
1611
1622
|
eventCode = event.get_event_code()
|
|
1612
|
-
if eventCode in (win32.LOAD_DLL_DEBUG_EVENT,
|
|
1613
|
-
win32.LOAD_DLL_DEBUG_EVENT):
|
|
1623
|
+
if eventCode in (win32.LOAD_DLL_DEBUG_EVENT, win32.LOAD_DLL_DEBUG_EVENT):
|
|
1614
1624
|
pid = event.get_pid()
|
|
1615
1625
|
handler = self.forward.get(pid, None)
|
|
1616
1626
|
if handler is None:
|
|
@@ -1646,9 +1656,11 @@ class EventSift(EventHandler):
|
|
|
1646
1656
|
del self.forward[pid]
|
|
1647
1657
|
return handler(event)
|
|
1648
1658
|
|
|
1649
|
-
#==============================================================================
|
|
1650
1659
|
|
|
1651
|
-
|
|
1660
|
+
# ==============================================================================
|
|
1661
|
+
|
|
1662
|
+
|
|
1663
|
+
class EventDispatcher(object):
|
|
1652
1664
|
"""
|
|
1653
1665
|
Implements debug event dispatching capabilities.
|
|
1654
1666
|
|
|
@@ -1660,40 +1672,39 @@ class EventDispatcher (object):
|
|
|
1660
1672
|
# These routines are called BEFORE the user-defined handlers.
|
|
1661
1673
|
# Unknown codes are ignored.
|
|
1662
1674
|
__preEventNotifyCallbackName = {
|
|
1663
|
-
win32.CREATE_THREAD_DEBUG_EVENT
|
|
1664
|
-
win32.CREATE_PROCESS_DEBUG_EVENT
|
|
1665
|
-
win32.LOAD_DLL_DEBUG_EVENT
|
|
1675
|
+
win32.CREATE_THREAD_DEBUG_EVENT: "_notify_create_thread",
|
|
1676
|
+
win32.CREATE_PROCESS_DEBUG_EVENT: "_notify_create_process",
|
|
1677
|
+
win32.LOAD_DLL_DEBUG_EVENT: "_notify_load_dll",
|
|
1666
1678
|
}
|
|
1667
1679
|
|
|
1668
1680
|
# Maps event code constants to the names of the post-notify routines.
|
|
1669
1681
|
# These routines are called AFTER the user-defined handlers.
|
|
1670
1682
|
# Unknown codes are ignored.
|
|
1671
1683
|
__postEventNotifyCallbackName = {
|
|
1672
|
-
win32.EXIT_THREAD_DEBUG_EVENT
|
|
1673
|
-
win32.EXIT_PROCESS_DEBUG_EVENT
|
|
1674
|
-
win32.UNLOAD_DLL_DEBUG_EVENT
|
|
1675
|
-
win32.RIP_EVENT
|
|
1684
|
+
win32.EXIT_THREAD_DEBUG_EVENT: "_notify_exit_thread",
|
|
1685
|
+
win32.EXIT_PROCESS_DEBUG_EVENT: "_notify_exit_process",
|
|
1686
|
+
win32.UNLOAD_DLL_DEBUG_EVENT: "_notify_unload_dll",
|
|
1687
|
+
win32.RIP_EVENT: "_notify_rip",
|
|
1676
1688
|
}
|
|
1677
1689
|
|
|
1678
1690
|
# Maps exception code constants to the names of the pre-notify routines.
|
|
1679
1691
|
# These routines are called BEFORE the user-defined handlers.
|
|
1680
1692
|
# Unknown codes are ignored.
|
|
1681
1693
|
__preExceptionNotifyCallbackName = {
|
|
1682
|
-
win32.EXCEPTION_BREAKPOINT
|
|
1683
|
-
win32.EXCEPTION_WX86_BREAKPOINT
|
|
1684
|
-
win32.EXCEPTION_SINGLE_STEP
|
|
1685
|
-
win32.EXCEPTION_GUARD_PAGE
|
|
1686
|
-
win32.DBG_CONTROL_C
|
|
1687
|
-
win32.MS_VC_EXCEPTION
|
|
1694
|
+
win32.EXCEPTION_BREAKPOINT: "_notify_breakpoint",
|
|
1695
|
+
win32.EXCEPTION_WX86_BREAKPOINT: "_notify_breakpoint",
|
|
1696
|
+
win32.EXCEPTION_SINGLE_STEP: "_notify_single_step",
|
|
1697
|
+
win32.EXCEPTION_GUARD_PAGE: "_notify_guard_page",
|
|
1698
|
+
win32.DBG_CONTROL_C: "_notify_debug_control_c",
|
|
1699
|
+
win32.MS_VC_EXCEPTION: "_notify_ms_vc_exception",
|
|
1688
1700
|
}
|
|
1689
1701
|
|
|
1690
1702
|
# Maps exception code constants to the names of the post-notify routines.
|
|
1691
1703
|
# These routines are called AFTER the user-defined handlers.
|
|
1692
1704
|
# Unknown codes are ignored.
|
|
1693
|
-
__postExceptionNotifyCallbackName = {
|
|
1694
|
-
}
|
|
1705
|
+
__postExceptionNotifyCallbackName = {}
|
|
1695
1706
|
|
|
1696
|
-
def __init__(self, eventHandler
|
|
1707
|
+
def __init__(self, eventHandler=None):
|
|
1697
1708
|
"""
|
|
1698
1709
|
Event dispatcher.
|
|
1699
1710
|
|
|
@@ -1747,9 +1758,9 @@ class EventDispatcher (object):
|
|
|
1747
1758
|
wrong_type = False
|
|
1748
1759
|
if wrong_type:
|
|
1749
1760
|
classname = str(eventHandler)
|
|
1750
|
-
msg
|
|
1761
|
+
msg = "Event handler must be an instance of class %s"
|
|
1751
1762
|
msg += "rather than the %s class itself. (Missing parens?)"
|
|
1752
|
-
msg
|
|
1763
|
+
msg = msg % (classname, classname)
|
|
1753
1764
|
raise TypeError(msg)
|
|
1754
1765
|
try:
|
|
1755
1766
|
previous = self.__eventHandler
|
|
@@ -1780,9 +1791,9 @@ class EventDispatcher (object):
|
|
|
1780
1791
|
Returns C{None} if no such method is defined.
|
|
1781
1792
|
"""
|
|
1782
1793
|
eventCode = event.get_event_code()
|
|
1783
|
-
method = getattr(eventHandler,
|
|
1794
|
+
method = getattr(eventHandler, "event", fallback)
|
|
1784
1795
|
if eventCode == win32.EXCEPTION_DEBUG_EVENT:
|
|
1785
|
-
method = getattr(eventHandler,
|
|
1796
|
+
method = getattr(eventHandler, "exception", method)
|
|
1786
1797
|
method = getattr(eventHandler, event.eventMethod, method)
|
|
1787
1798
|
return method
|
|
1788
1799
|
|
|
@@ -1804,23 +1815,21 @@ class EventDispatcher (object):
|
|
|
1804
1815
|
|
|
1805
1816
|
@raise WindowsError: Raises an exception on error.
|
|
1806
1817
|
"""
|
|
1807
|
-
returnValue
|
|
1818
|
+
returnValue = None
|
|
1808
1819
|
bCallHandler = True
|
|
1809
|
-
pre_handler
|
|
1820
|
+
pre_handler = None
|
|
1810
1821
|
post_handler = None
|
|
1811
|
-
eventCode
|
|
1822
|
+
eventCode = event.get_event_code()
|
|
1812
1823
|
|
|
1813
1824
|
# Get the pre and post notification methods for exceptions.
|
|
1814
1825
|
# If not found, the following steps take care of that.
|
|
1815
1826
|
if eventCode == win32.EXCEPTION_DEBUG_EVENT:
|
|
1816
1827
|
exceptionCode = event.get_exception_code()
|
|
1817
|
-
pre_name
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
if
|
|
1822
|
-
pre_handler = getattr(self, pre_name, None)
|
|
1823
|
-
if post_name is not None:
|
|
1828
|
+
pre_name = self.__preExceptionNotifyCallbackName.get(exceptionCode, None)
|
|
1829
|
+
post_name = self.__postExceptionNotifyCallbackName.get(exceptionCode, None)
|
|
1830
|
+
if pre_name is not None:
|
|
1831
|
+
pre_handler = getattr(self, pre_name, None)
|
|
1832
|
+
if post_name is not None:
|
|
1824
1833
|
post_handler = getattr(self, post_name, None)
|
|
1825
1834
|
|
|
1826
1835
|
# Get the pre notification method for all other events.
|
|
@@ -1828,7 +1837,7 @@ class EventDispatcher (object):
|
|
|
1828
1837
|
# for this exception code.
|
|
1829
1838
|
if pre_handler is None:
|
|
1830
1839
|
pre_name = self.__preEventNotifyCallbackName.get(eventCode, None)
|
|
1831
|
-
if
|
|
1840
|
+
if pre_name is not None:
|
|
1832
1841
|
pre_handler = getattr(self, pre_name, pre_handler)
|
|
1833
1842
|
|
|
1834
1843
|
# Get the post notification method for all other events.
|
|
@@ -1836,7 +1845,7 @@ class EventDispatcher (object):
|
|
|
1836
1845
|
# for this exception code.
|
|
1837
1846
|
if post_handler is None:
|
|
1838
1847
|
post_name = self.__postEventNotifyCallbackName.get(eventCode, None)
|
|
1839
|
-
if
|
|
1848
|
+
if post_name is not None:
|
|
1840
1849
|
post_handler = getattr(self, post_name, post_handler)
|
|
1841
1850
|
|
|
1842
1851
|
# Call the pre-notify method only if it was defined.
|
|
@@ -1852,8 +1861,7 @@ class EventDispatcher (object):
|
|
|
1852
1861
|
returnValue = self.__eventHandler(event)
|
|
1853
1862
|
except Exception:
|
|
1854
1863
|
e = sys.exc_info()[1]
|
|
1855
|
-
msg =
|
|
1856
|
-
" raised an exception: %s")
|
|
1864
|
+
msg = "Event handler pre-callback %r" " raised an exception: %s"
|
|
1857
1865
|
msg = msg % (self.__eventHandler, traceback.format_exc(e))
|
|
1858
1866
|
warnings.warn(msg, EventCallbackWarning)
|
|
1859
1867
|
returnValue = None
|