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
|
@@ -46,7 +46,7 @@ from __future__ import with_statement
|
|
|
46
46
|
|
|
47
47
|
__revision__ = "$Id$"
|
|
48
48
|
|
|
49
|
-
__all__ = [
|
|
49
|
+
__all__ = ["ConsoleDebugger", "CmdError"]
|
|
50
50
|
|
|
51
51
|
# TODO document this module with docstrings.
|
|
52
52
|
# TODO command to set a last error breakpoint.
|
|
@@ -72,10 +72,10 @@ from cmd import Cmd
|
|
|
72
72
|
# lazy imports
|
|
73
73
|
readline = None
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
# ==============================================================================
|
|
76
76
|
|
|
77
77
|
|
|
78
|
-
class DummyEvent
|
|
78
|
+
class DummyEvent(NoEvent):
|
|
79
79
|
"Dummy event object used internally by L{ConsoleDebugger}."
|
|
80
80
|
|
|
81
81
|
def get_pid(self):
|
|
@@ -90,27 +90,29 @@ class DummyEvent (NoEvent):
|
|
|
90
90
|
def get_thread(self):
|
|
91
91
|
return self._thread
|
|
92
92
|
|
|
93
|
-
#==============================================================================
|
|
94
93
|
|
|
94
|
+
# ==============================================================================
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
|
|
97
|
+
class CmdError(Exception):
|
|
97
98
|
"""
|
|
98
99
|
Exception raised when a command parsing error occurs.
|
|
99
100
|
Used internally by L{ConsoleDebugger}.
|
|
100
101
|
"""
|
|
101
102
|
|
|
102
|
-
|
|
103
|
+
|
|
104
|
+
# ==============================================================================
|
|
103
105
|
|
|
104
106
|
|
|
105
|
-
class ConsoleDebugger
|
|
107
|
+
class ConsoleDebugger(Cmd, EventHandler):
|
|
106
108
|
"""
|
|
107
109
|
Interactive console debugger.
|
|
108
110
|
|
|
109
111
|
@see: L{Debug.interactive}
|
|
110
112
|
"""
|
|
111
113
|
|
|
112
|
-
|
|
113
|
-
# Class variables
|
|
114
|
+
# ------------------------------------------------------------------------------
|
|
115
|
+
# Class variables
|
|
114
116
|
|
|
115
117
|
# Exception to raise when an error occurs executing a command.
|
|
116
118
|
command_error_exception = CmdError
|
|
@@ -119,30 +121,34 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
119
121
|
dwMilliseconds = 100
|
|
120
122
|
|
|
121
123
|
# History file name.
|
|
122
|
-
history_file =
|
|
124
|
+
history_file = ".winappdbg_history"
|
|
123
125
|
|
|
124
126
|
# Confirm before quitting?
|
|
125
127
|
confirm_quit = True
|
|
126
128
|
|
|
127
129
|
# Valid plugin name characters.
|
|
128
|
-
valid_plugin_name_chars =
|
|
129
|
-
'abcdefghijklmnopqrstuvwxy' \
|
|
130
|
-
'012345678' \
|
|
131
|
-
'_'
|
|
130
|
+
valid_plugin_name_chars = "ABCDEFGHIJKLMNOPQRSTUVWXY" "abcdefghijklmnopqrstuvwxy" "012345678" "_"
|
|
132
131
|
|
|
133
132
|
# Names of the registers.
|
|
134
|
-
segment_names = (
|
|
133
|
+
segment_names = ("cs", "ds", "es", "fs", "gs")
|
|
135
134
|
|
|
136
135
|
register_alias_64_to_32 = {
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
"eax": "Rax",
|
|
137
|
+
"ebx": "Rbx",
|
|
138
|
+
"ecx": "Rcx",
|
|
139
|
+
"edx": "Rdx",
|
|
140
|
+
"eip": "Rip",
|
|
141
|
+
"ebp": "Rbp",
|
|
142
|
+
"esp": "Rsp",
|
|
143
|
+
"esi": "Rsi",
|
|
144
|
+
"edi": "Rdi",
|
|
139
145
|
}
|
|
140
|
-
register_alias_64_to_16 = {
|
|
141
|
-
register_alias_64_to_8_low = {
|
|
142
|
-
register_alias_64_to_8_high = {
|
|
143
|
-
register_alias_32_to_16 = {
|
|
144
|
-
register_alias_32_to_8_low = {
|
|
145
|
-
register_alias_32_to_8_high = {
|
|
146
|
+
register_alias_64_to_16 = {"ax": "Rax", "bx": "Rbx", "cx": "Rcx", "dx": "Rdx"}
|
|
147
|
+
register_alias_64_to_8_low = {"al": "Rax", "bl": "Rbx", "cl": "Rcx", "dl": "Rdx"}
|
|
148
|
+
register_alias_64_to_8_high = {"ah": "Rax", "bh": "Rbx", "ch": "Rcx", "dh": "Rdx"}
|
|
149
|
+
register_alias_32_to_16 = {"ax": "Eax", "bx": "Ebx", "cx": "Ecx", "dx": "Edx"}
|
|
150
|
+
register_alias_32_to_8_low = {"al": "Eax", "bl": "Ebx", "cl": "Ecx", "dl": "Edx"}
|
|
151
|
+
register_alias_32_to_8_high = {"ah": "Eax", "bh": "Ebx", "ch": "Ecx", "dh": "Edx"}
|
|
146
152
|
|
|
147
153
|
register_aliases_full_32 = list(segment_names)
|
|
148
154
|
register_aliases_full_32.extend(compat.iterkeys(register_alias_32_to_16))
|
|
@@ -159,18 +165,46 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
159
165
|
|
|
160
166
|
# Names of the control flow instructions.
|
|
161
167
|
jump_instructions = (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
168
|
+
"jmp",
|
|
169
|
+
"jecxz",
|
|
170
|
+
"jcxz",
|
|
171
|
+
"ja",
|
|
172
|
+
"jnbe",
|
|
173
|
+
"jae",
|
|
174
|
+
"jnb",
|
|
175
|
+
"jb",
|
|
176
|
+
"jnae",
|
|
177
|
+
"jbe",
|
|
178
|
+
"jna",
|
|
179
|
+
"jc",
|
|
180
|
+
"je",
|
|
181
|
+
"jz",
|
|
182
|
+
"jnc",
|
|
183
|
+
"jne",
|
|
184
|
+
"jnz",
|
|
185
|
+
"jnp",
|
|
186
|
+
"jpo",
|
|
187
|
+
"jp",
|
|
188
|
+
"jpe",
|
|
189
|
+
"jg",
|
|
190
|
+
"jnle",
|
|
191
|
+
"jge",
|
|
192
|
+
"jnl",
|
|
193
|
+
"jl",
|
|
194
|
+
"jnge",
|
|
195
|
+
"jle",
|
|
196
|
+
"jng",
|
|
197
|
+
"jno",
|
|
198
|
+
"jns",
|
|
199
|
+
"jo",
|
|
200
|
+
"js",
|
|
166
201
|
)
|
|
167
|
-
call_instructions = (
|
|
168
|
-
loop_instructions = (
|
|
169
|
-
control_flow_instructions = call_instructions + loop_instructions +
|
|
170
|
-
jump_instructions
|
|
202
|
+
call_instructions = ("call", "ret", "retn")
|
|
203
|
+
loop_instructions = ("loop", "loopz", "loopnz", "loope", "loopne")
|
|
204
|
+
control_flow_instructions = call_instructions + loop_instructions + jump_instructions
|
|
171
205
|
|
|
172
|
-
|
|
173
|
-
# Instance variables
|
|
206
|
+
# ------------------------------------------------------------------------------
|
|
207
|
+
# Instance variables
|
|
174
208
|
|
|
175
209
|
def __init__(self):
|
|
176
210
|
"""
|
|
@@ -190,12 +224,11 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
190
224
|
# Last executed command.
|
|
191
225
|
self.__lastcmd = ""
|
|
192
226
|
|
|
193
|
-
|
|
194
|
-
# Debugger
|
|
227
|
+
# ------------------------------------------------------------------------------
|
|
228
|
+
# Debugger
|
|
195
229
|
|
|
196
230
|
# Use this Debug object.
|
|
197
231
|
def start_using_debugger(self, debug):
|
|
198
|
-
|
|
199
232
|
# Clear the previous Debug object.
|
|
200
233
|
self.stop_using_debugger()
|
|
201
234
|
|
|
@@ -208,7 +241,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
208
241
|
# Stop using the Debug object given by start_using_debugger().
|
|
209
242
|
# Circular references must be removed, or the destructors never get called.
|
|
210
243
|
def stop_using_debugger(self):
|
|
211
|
-
if hasattr(self,
|
|
244
|
+
if hasattr(self, "debug"):
|
|
212
245
|
debug = self.debug
|
|
213
246
|
debug.set_event_handler(self.prevHandler)
|
|
214
247
|
del self.prevHandler
|
|
@@ -234,21 +267,20 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
234
267
|
if self.lastEvent is None:
|
|
235
268
|
self.debug.lastEvent = DummyEvent(self.debug)
|
|
236
269
|
self.debug.lastEvent._process = process
|
|
237
|
-
self.debug.lastEvent._thread = process.get_thread(
|
|
238
|
-
process.get_thread_ids()[0])
|
|
270
|
+
self.debug.lastEvent._thread = process.get_thread(process.get_thread_ids()[0])
|
|
239
271
|
self.debug.lastEvent._pid = process.get_pid()
|
|
240
272
|
self.debug.lastEvent._tid = self.lastEvent._thread.get_tid()
|
|
241
273
|
|
|
242
|
-
|
|
243
|
-
# Input
|
|
274
|
+
# ------------------------------------------------------------------------------
|
|
275
|
+
# Input
|
|
244
276
|
|
|
245
|
-
# TODO
|
|
246
|
-
# * try to guess breakpoints when insufficient data is given
|
|
247
|
-
# * child Cmd instances will have to be used for other prompts, for example
|
|
248
|
-
# when assembling or editing memory - it may also be a good idea to think
|
|
249
|
-
# if it's possible to make the main Cmd instance also a child, instead of
|
|
250
|
-
# the debugger itself - probably the same goes for the EventHandler, maybe
|
|
251
|
-
# it can be used as a contained object rather than a parent class.
|
|
277
|
+
# TODO
|
|
278
|
+
# * try to guess breakpoints when insufficient data is given
|
|
279
|
+
# * child Cmd instances will have to be used for other prompts, for example
|
|
280
|
+
# when assembling or editing memory - it may also be a good idea to think
|
|
281
|
+
# if it's possible to make the main Cmd instance also a child, instead of
|
|
282
|
+
# the debugger itself - probably the same goes for the EventHandler, maybe
|
|
283
|
+
# it can be used as a contained object rather than a parent class.
|
|
252
284
|
|
|
253
285
|
# Join a token list into an argument string.
|
|
254
286
|
def join_tokens(self, token_list):
|
|
@@ -272,7 +304,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
272
304
|
msg = "more than one thread with that name:\n"
|
|
273
305
|
for tid in targets:
|
|
274
306
|
msg += "\t%d\n" % tid
|
|
275
|
-
msg = msg[
|
|
307
|
+
msg = msg[: -len("\n")]
|
|
276
308
|
raise CmdError(msg)
|
|
277
309
|
return targets[0]
|
|
278
310
|
|
|
@@ -307,7 +339,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
307
339
|
msg = "more than one process with that name:\n"
|
|
308
340
|
for pid in targets:
|
|
309
341
|
msg += "\t%d\n" % pid
|
|
310
|
-
msg = msg[
|
|
342
|
+
msg = msg[: -len("\n")]
|
|
311
343
|
raise CmdError(msg)
|
|
312
344
|
return targets[0]
|
|
313
345
|
|
|
@@ -325,7 +357,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
325
357
|
found = system.find_processes_by_filename(token)
|
|
326
358
|
if not found:
|
|
327
359
|
raise CmdError("process not found (%s)" % token)
|
|
328
|
-
for
|
|
360
|
+
for process, _ in found:
|
|
329
361
|
targets.add(process.get_pid())
|
|
330
362
|
targets = list(targets)
|
|
331
363
|
targets.sort()
|
|
@@ -339,7 +371,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
339
371
|
fname = argv[0]
|
|
340
372
|
if not os.path.exists(fname):
|
|
341
373
|
try:
|
|
342
|
-
fname, _ = win32.SearchPath(None, fname,
|
|
374
|
+
fname, _ = win32.SearchPath(None, fname, ".exe")
|
|
343
375
|
except WindowsError:
|
|
344
376
|
raise CmdError("file not found: %s" % fname)
|
|
345
377
|
argv[0] = fname
|
|
@@ -355,7 +387,8 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
355
387
|
# It can be in any supported format.
|
|
356
388
|
def input_integer(self, token):
|
|
357
389
|
return HexInput.integer(token)
|
|
358
|
-
|
|
390
|
+
|
|
391
|
+
# # input_integer = input_hexadecimal_integer
|
|
359
392
|
|
|
360
393
|
# Token is an address.
|
|
361
394
|
# The address can be a integer, a label or a register.
|
|
@@ -401,9 +434,9 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
401
434
|
raise CmdError("bad address range: %s %s" % (token_1, token_2))
|
|
402
435
|
elif len(token_list) == 1:
|
|
403
436
|
token = token_list[0]
|
|
404
|
-
if
|
|
437
|
+
if "-" in token:
|
|
405
438
|
try:
|
|
406
|
-
token_1, token_2 = token.split(
|
|
439
|
+
token_1, token_2 = token.split("-")
|
|
407
440
|
except Exception:
|
|
408
441
|
raise CmdError("bad address range: %s" % token)
|
|
409
442
|
address = self.input_address(token_1, pid, tid)
|
|
@@ -416,18 +449,18 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
416
449
|
# XXX TODO
|
|
417
450
|
# Support non-integer registers here.
|
|
418
451
|
def is_register(self, token):
|
|
419
|
-
if win32.arch ==
|
|
452
|
+
if win32.arch == "i386":
|
|
420
453
|
if token in self.register_aliases_full_32:
|
|
421
454
|
return True
|
|
422
455
|
token = token.title()
|
|
423
|
-
for
|
|
456
|
+
for name, typ in win32.CONTEXT._fields_:
|
|
424
457
|
if name == token:
|
|
425
458
|
return win32.sizeof(typ) == win32.sizeof(win32.DWORD)
|
|
426
|
-
elif win32.arch ==
|
|
459
|
+
elif win32.arch == "amd64":
|
|
427
460
|
if token in self.register_aliases_full_64:
|
|
428
461
|
return True
|
|
429
462
|
token = token.title()
|
|
430
|
-
for
|
|
463
|
+
for name, typ in win32.CONTEXT._fields_:
|
|
431
464
|
if name == token:
|
|
432
465
|
return win32.sizeof(typ) == win32.sizeof(win32.DWORD64)
|
|
433
466
|
return False
|
|
@@ -449,10 +482,9 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
449
482
|
if title in ctx:
|
|
450
483
|
return ctx.get(title) # eax -> Eax
|
|
451
484
|
|
|
452
|
-
if ctx.arch ==
|
|
453
|
-
|
|
485
|
+
if ctx.arch == "i386":
|
|
454
486
|
if token in self.segment_names:
|
|
455
|
-
return ctx.get(
|
|
487
|
+
return ctx.get("Seg%s" % title) # cs -> SegCs
|
|
456
488
|
|
|
457
489
|
if token in self.register_alias_32_to_16:
|
|
458
490
|
return ctx.get(self.register_alias_32_to_16[token]) & 0xFFFF
|
|
@@ -463,10 +495,9 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
463
495
|
if token in self.register_alias_32_to_8_high:
|
|
464
496
|
return (ctx.get(self.register_alias_32_to_8_high[token]) & 0xFF00) >> 8
|
|
465
497
|
|
|
466
|
-
elif ctx.arch ==
|
|
467
|
-
|
|
498
|
+
elif ctx.arch == "amd64":
|
|
468
499
|
if token in self.segment_names:
|
|
469
|
-
return ctx.get(
|
|
500
|
+
return ctx.get("Seg%s" % title) # cs -> SegCs
|
|
470
501
|
|
|
471
502
|
if token in self.register_alias_64_to_32:
|
|
472
503
|
return ctx.get(self.register_alias_64_to_32[token]) & 0xFFFFFFFF
|
|
@@ -506,8 +537,8 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
506
537
|
self.default_display_target = next_address
|
|
507
538
|
return pid, tid, address, size
|
|
508
539
|
|
|
509
|
-
|
|
510
|
-
# Output
|
|
540
|
+
# ------------------------------------------------------------------------------
|
|
541
|
+
# Output
|
|
511
542
|
|
|
512
543
|
# Tell the user a module was loaded.
|
|
513
544
|
def print_module_load(self, event):
|
|
@@ -515,7 +546,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
515
546
|
base = mod.get_base()
|
|
516
547
|
name = mod.get_filename()
|
|
517
548
|
if not name:
|
|
518
|
-
name =
|
|
549
|
+
name = ""
|
|
519
550
|
msg = "Loaded module (%s) %s"
|
|
520
551
|
msg = msg % (HexDump.address(base), name)
|
|
521
552
|
print(msg)
|
|
@@ -526,7 +557,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
526
557
|
base = mod.get_base()
|
|
527
558
|
name = mod.get_filename()
|
|
528
559
|
if not name:
|
|
529
|
-
name =
|
|
560
|
+
name = ""
|
|
530
561
|
msg = "Unloaded module (%s) %s"
|
|
531
562
|
msg = msg % (HexDump.address(base), name)
|
|
532
563
|
print(msg)
|
|
@@ -577,10 +608,10 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
577
608
|
name = event.get_event_name()
|
|
578
609
|
desc = event.get_event_description()
|
|
579
610
|
if code in desc:
|
|
580
|
-
print(
|
|
611
|
+
print("")
|
|
581
612
|
print("%s: %s" % (name, desc))
|
|
582
613
|
else:
|
|
583
|
-
print(
|
|
614
|
+
print("")
|
|
584
615
|
print("%s (%s): %s" % (name, code, desc))
|
|
585
616
|
self.print_event_location(event)
|
|
586
617
|
|
|
@@ -590,14 +621,14 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
590
621
|
code = HexDump.integer(event.get_exception_code())
|
|
591
622
|
desc = event.get_exception_description()
|
|
592
623
|
if event.is_first_chance():
|
|
593
|
-
chance =
|
|
624
|
+
chance = "first"
|
|
594
625
|
else:
|
|
595
|
-
chance =
|
|
626
|
+
chance = "second"
|
|
596
627
|
if code in desc:
|
|
597
628
|
msg = "%s at address %s (%s chance)" % (desc, address, chance)
|
|
598
629
|
else:
|
|
599
630
|
msg = "%s (%s) at address %s (%s chance)" % (desc, code, address, chance)
|
|
600
|
-
print(
|
|
631
|
+
print("")
|
|
601
632
|
print(msg)
|
|
602
633
|
self.print_event_location(event)
|
|
603
634
|
|
|
@@ -638,8 +669,10 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
638
669
|
disasm = None
|
|
639
670
|
except NotImplementedError:
|
|
640
671
|
disasm = None
|
|
641
|
-
print(
|
|
642
|
-
print(
|
|
672
|
+
print("")
|
|
673
|
+
print(
|
|
674
|
+
CrashDump.dump_registers(ctx),
|
|
675
|
+
)
|
|
643
676
|
print("%s:" % label)
|
|
644
677
|
if disasm:
|
|
645
678
|
print(CrashDump.dump_code_line(disasm[0], pc, bShowDump=True))
|
|
@@ -649,9 +682,9 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
649
682
|
except Exception:
|
|
650
683
|
data = None
|
|
651
684
|
if data:
|
|
652
|
-
print(
|
|
685
|
+
print("%s: %s" % (HexDump.address(pc), HexDump.hexblock_byte(data)))
|
|
653
686
|
else:
|
|
654
|
-
print(
|
|
687
|
+
print("%s: ???" % HexDump.address(pc))
|
|
655
688
|
|
|
656
689
|
# Display memory contents using a given method.
|
|
657
690
|
def print_memory_display(self, arg, method):
|
|
@@ -663,10 +696,12 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
663
696
|
data = self.read_memory(address, size, pid)
|
|
664
697
|
if data:
|
|
665
698
|
print("%s:" % label)
|
|
666
|
-
print(
|
|
699
|
+
print(
|
|
700
|
+
method(data, address),
|
|
701
|
+
)
|
|
667
702
|
|
|
668
|
-
|
|
669
|
-
# Debugging
|
|
703
|
+
# ------------------------------------------------------------------------------
|
|
704
|
+
# Debugging
|
|
670
705
|
|
|
671
706
|
# Get the process ID from the prefix or the last event.
|
|
672
707
|
def get_process_id_from_prefix(self):
|
|
@@ -783,7 +818,6 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
783
818
|
|
|
784
819
|
# Change a register value.
|
|
785
820
|
def change_register(self, register, value, tid=None):
|
|
786
|
-
|
|
787
821
|
# Get the thread.
|
|
788
822
|
if tid is None:
|
|
789
823
|
if self.lastEvent is None:
|
|
@@ -806,7 +840,6 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
806
840
|
# The finally clause ensures the thread is resumed before returning.
|
|
807
841
|
thread.suspend()
|
|
808
842
|
try:
|
|
809
|
-
|
|
810
843
|
# Get the current context.
|
|
811
844
|
ctx = thread.get_context()
|
|
812
845
|
|
|
@@ -819,7 +852,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
819
852
|
|
|
820
853
|
# Segment (16 bit) registers.
|
|
821
854
|
if register in self.segment_names:
|
|
822
|
-
register =
|
|
855
|
+
register = "Seg%s" % register.title() # cs -> SegCs
|
|
823
856
|
value = value & 0x0000FFFF
|
|
824
857
|
|
|
825
858
|
# Integer 16 bits registers.
|
|
@@ -866,7 +899,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
866
899
|
p = data.find(query)
|
|
867
900
|
while p >= 0:
|
|
868
901
|
q = p + len(query)
|
|
869
|
-
d = data[
|
|
902
|
+
d = data[p : min(q, p + width)]
|
|
870
903
|
h = HexDump.hexline(d, width=width)
|
|
871
904
|
a = HexDump.address(address + p)
|
|
872
905
|
print("%s: %s" % (a, h))
|
|
@@ -896,8 +929,8 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
896
929
|
except Exception:
|
|
897
930
|
print("Error trying to kill thread (%d)" % tid)
|
|
898
931
|
|
|
899
|
-
|
|
900
|
-
# Command prompt input
|
|
932
|
+
# ------------------------------------------------------------------------------
|
|
933
|
+
# Command prompt input
|
|
901
934
|
|
|
902
935
|
# Prompt the user for commands.
|
|
903
936
|
def prompt_user(self):
|
|
@@ -910,14 +943,15 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
910
943
|
print("*** Error: %s" % str(e))
|
|
911
944
|
except Exception:
|
|
912
945
|
traceback.print_exc()
|
|
913
|
-
|
|
946
|
+
|
|
947
|
+
# # self.debuggerExit = True
|
|
914
948
|
|
|
915
949
|
# Prompt the user for a YES/NO kind of question.
|
|
916
950
|
def ask_user(self, msg, prompt="Are you sure? (y/N): "):
|
|
917
951
|
print(msg)
|
|
918
952
|
answer = raw_input(prompt)
|
|
919
953
|
answer = answer.strip()[:1].lower()
|
|
920
|
-
return answer ==
|
|
954
|
+
return answer == "y"
|
|
921
955
|
|
|
922
956
|
# Autocomplete the given command when not ambiguous.
|
|
923
957
|
# Convert it to lowercase (so commands are seen as case insensitive).
|
|
@@ -936,42 +970,41 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
936
970
|
def get_help(self, commands):
|
|
937
971
|
msg = set()
|
|
938
972
|
for name in commands:
|
|
939
|
-
if name !=
|
|
973
|
+
if name != "do_help":
|
|
940
974
|
try:
|
|
941
|
-
doc = getattr(self, name).__doc__.split(
|
|
975
|
+
doc = getattr(self, name).__doc__.split("\n")
|
|
942
976
|
except Exception:
|
|
943
|
-
return
|
|
944
|
-
" is run with the -OO switch.")
|
|
977
|
+
return "No help available when Python" " is run with the -OO switch."
|
|
945
978
|
for x in doc:
|
|
946
979
|
x = x.strip()
|
|
947
980
|
if x:
|
|
948
|
-
msg.add(
|
|
981
|
+
msg.add(" %s" % x)
|
|
949
982
|
msg = list(msg)
|
|
950
983
|
msg.sort()
|
|
951
|
-
msg =
|
|
984
|
+
msg = "\n".join(msg)
|
|
952
985
|
return msg
|
|
953
986
|
|
|
954
987
|
# Parse the prefix and remove it from the command line.
|
|
955
988
|
def split_prefix(self, line):
|
|
956
989
|
prefix = None
|
|
957
|
-
if line.startswith(
|
|
958
|
-
pos = line.find(
|
|
990
|
+
if line.startswith("~"):
|
|
991
|
+
pos = line.find(" ")
|
|
959
992
|
if pos == 1:
|
|
960
|
-
pos = line.find(
|
|
993
|
+
pos = line.find(" ", pos + 1)
|
|
961
994
|
if not pos < 0:
|
|
962
|
-
prefix = line[
|
|
963
|
-
line = line[
|
|
995
|
+
prefix = line[1:pos].strip()
|
|
996
|
+
line = line[pos:].strip()
|
|
964
997
|
return prefix, line
|
|
965
998
|
|
|
966
|
-
|
|
967
|
-
# Cmd() hacks
|
|
999
|
+
# ------------------------------------------------------------------------------
|
|
1000
|
+
# Cmd() hacks
|
|
968
1001
|
|
|
969
1002
|
# Header for help page.
|
|
970
|
-
doc_header =
|
|
1003
|
+
doc_header = "Available commands (type help * or help <command>)"
|
|
971
1004
|
|
|
972
|
-
# # # Read and write directly to stdin and stdout.
|
|
973
|
-
# # # This prevents the use of raw_input and print.
|
|
974
|
-
# # use_rawinput = False
|
|
1005
|
+
# # # Read and write directly to stdin and stdout.
|
|
1006
|
+
# # # This prevents the use of raw_input and print.
|
|
1007
|
+
# # use_rawinput = False
|
|
975
1008
|
|
|
976
1009
|
@property
|
|
977
1010
|
def prompt(self):
|
|
@@ -979,15 +1012,15 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
979
1012
|
pid = self.lastEvent.get_pid()
|
|
980
1013
|
tid = self.lastEvent.get_tid()
|
|
981
1014
|
if self.debug.is_debugee(pid):
|
|
982
|
-
# # return '~%d(%d)> ' % (tid, pid)
|
|
983
|
-
return
|
|
984
|
-
return
|
|
1015
|
+
# # return '~%d(%d)> ' % (tid, pid)
|
|
1016
|
+
return "%d:%d> " % (pid, tid)
|
|
1017
|
+
return "> "
|
|
985
1018
|
|
|
986
1019
|
# Return a sorted list of method names.
|
|
987
1020
|
# Only returns the methods that implement commands.
|
|
988
1021
|
def get_names(self):
|
|
989
1022
|
names = Cmd.get_names(self)
|
|
990
|
-
names = [
|
|
1023
|
+
names = [x for x in set(names) if x.startswith("do_")]
|
|
991
1024
|
names.sort()
|
|
992
1025
|
return names
|
|
993
1026
|
|
|
@@ -998,23 +1031,23 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
998
1031
|
self.cmdprefix, line = self.split_prefix(line)
|
|
999
1032
|
line = line.strip()
|
|
1000
1033
|
if line:
|
|
1001
|
-
if line[0] ==
|
|
1002
|
-
line =
|
|
1003
|
-
elif line[0] ==
|
|
1004
|
-
line =
|
|
1034
|
+
if line[0] == ".":
|
|
1035
|
+
line = "plugin " + line[1:]
|
|
1036
|
+
elif line[0] == "#":
|
|
1037
|
+
line = "python " + line[1:]
|
|
1005
1038
|
cmd, arg, line = Cmd.parseline(self, line)
|
|
1006
1039
|
if cmd:
|
|
1007
1040
|
cmd = self.autocomplete(cmd)
|
|
1008
1041
|
return cmd, arg, line
|
|
1009
1042
|
|
|
1010
|
-
# # # Don't repeat the last executed command.
|
|
1011
|
-
# # def emptyline(self):
|
|
1012
|
-
# # pass
|
|
1043
|
+
# # # Don't repeat the last executed command.
|
|
1044
|
+
# # def emptyline(self):
|
|
1045
|
+
# # pass
|
|
1013
1046
|
|
|
1014
1047
|
# Reset the defaults for some commands.
|
|
1015
1048
|
def preloop(self):
|
|
1016
|
-
self.default_disasm_target =
|
|
1017
|
-
self.default_display_target =
|
|
1049
|
+
self.default_disasm_target = "eip"
|
|
1050
|
+
self.default_display_target = "eip"
|
|
1018
1051
|
self.last_display_command = self.do_db
|
|
1019
1052
|
|
|
1020
1053
|
# Put the prefix back in the command line.
|
|
@@ -1023,7 +1056,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1023
1056
|
|
|
1024
1057
|
def set_lastcmd(self, lastcmd):
|
|
1025
1058
|
if self.cmdprefix:
|
|
1026
|
-
lastcmd =
|
|
1059
|
+
lastcmd = "~%s %s" % (self.cmdprefix, lastcmd)
|
|
1027
1060
|
self.__lastcmd = lastcmd
|
|
1028
1061
|
|
|
1029
1062
|
lastcmd = property(get_lastcmd, set_lastcmd)
|
|
@@ -1032,8 +1065,8 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1032
1065
|
def postcmd(self, stop, line):
|
|
1033
1066
|
return stop or self.debuggerExit
|
|
1034
1067
|
|
|
1035
|
-
|
|
1036
|
-
# Commands
|
|
1068
|
+
# ------------------------------------------------------------------------------
|
|
1069
|
+
# Commands
|
|
1037
1070
|
|
|
1038
1071
|
# Each command contains a docstring with it's help text.
|
|
1039
1072
|
# The help text consist of independent text lines,
|
|
@@ -1055,23 +1088,23 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1055
1088
|
"""
|
|
1056
1089
|
if not arg:
|
|
1057
1090
|
Cmd.do_help(self, arg)
|
|
1058
|
-
elif arg in (
|
|
1091
|
+
elif arg in ("?", "help"):
|
|
1059
1092
|
# An easter egg :)
|
|
1060
1093
|
print(" Help! I need somebody...")
|
|
1061
1094
|
print(" Help! Not just anybody...")
|
|
1062
1095
|
print(" Help! You know, I need someone...")
|
|
1063
1096
|
print(" Heeelp!")
|
|
1064
1097
|
else:
|
|
1065
|
-
if arg ==
|
|
1098
|
+
if arg == "*":
|
|
1066
1099
|
commands = self.get_names()
|
|
1067
|
-
commands = [
|
|
1100
|
+
commands = [x for x in commands if x.startswith("do_")]
|
|
1068
1101
|
else:
|
|
1069
1102
|
commands = set()
|
|
1070
|
-
for x in arg.split(
|
|
1103
|
+
for x in arg.split(" "):
|
|
1071
1104
|
x = x.strip()
|
|
1072
1105
|
if x:
|
|
1073
1106
|
for n in self.completenames(x):
|
|
1074
|
-
commands.add(
|
|
1107
|
+
commands.add("do_%s" % n)
|
|
1075
1108
|
commands = list(commands)
|
|
1076
1109
|
commands.sort()
|
|
1077
1110
|
print(self.get_help(commands))
|
|
@@ -1090,12 +1123,12 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1090
1123
|
# If not found, it's usually OK to just use the filename,
|
|
1091
1124
|
# since cmd.exe is one of those "magic" programs that
|
|
1092
1125
|
# can be automatically found by CreateProcess.
|
|
1093
|
-
shell = os.getenv(
|
|
1126
|
+
shell = os.getenv("ComSpec", "cmd.exe")
|
|
1094
1127
|
|
|
1095
1128
|
# When given a command, run it and return.
|
|
1096
1129
|
# When no command is given, spawn a shell.
|
|
1097
1130
|
if arg:
|
|
1098
|
-
arg =
|
|
1131
|
+
arg = "%s /c %s" % (shell, arg)
|
|
1099
1132
|
else:
|
|
1100
1133
|
arg = shell
|
|
1101
1134
|
process = self.debug.system.start_process(arg, bConsole=True)
|
|
@@ -1104,7 +1137,6 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1104
1137
|
# This hack fixes a bug in Python, the interpreter console is closing the
|
|
1105
1138
|
# stdin pipe when calling the exit() function (Ctrl+Z seems to work fine).
|
|
1106
1139
|
class _PythonExit(object):
|
|
1107
|
-
|
|
1108
1140
|
def __repr__(self):
|
|
1109
1141
|
return "Use exit() or Ctrl-Z plus Return to exit"
|
|
1110
1142
|
|
|
@@ -1117,21 +1149,23 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1117
1149
|
# module already imported. Also the console banner is improved.
|
|
1118
1150
|
def _spawn_python_shell(self, arg):
|
|
1119
1151
|
import winappdbg
|
|
1120
|
-
|
|
1121
|
-
|
|
1152
|
+
|
|
1153
|
+
banner = 'Python %s on %s\nType "help", "copyright", ' '"credits" or "license" for more information.\n'
|
|
1122
1154
|
platform = winappdbg.version.lower()
|
|
1123
|
-
platform =
|
|
1155
|
+
platform = "WinAppDbg %s" % platform
|
|
1124
1156
|
banner = banner % (sys.version, platform)
|
|
1125
1157
|
local = {}
|
|
1126
1158
|
local.update(__builtins__)
|
|
1127
|
-
local.update(
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1159
|
+
local.update(
|
|
1160
|
+
{
|
|
1161
|
+
"__name__": "__console__",
|
|
1162
|
+
"__doc__": None,
|
|
1163
|
+
"exit": self._python_exit,
|
|
1164
|
+
"self": self,
|
|
1165
|
+
"arg": arg,
|
|
1166
|
+
"winappdbg": winappdbg,
|
|
1167
|
+
}
|
|
1168
|
+
)
|
|
1135
1169
|
try:
|
|
1136
1170
|
code.interact(banner=banner, local=local)
|
|
1137
1171
|
except SystemExit:
|
|
@@ -1161,8 +1195,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1161
1195
|
self._spawn_python_shell(arg)
|
|
1162
1196
|
except Exception:
|
|
1163
1197
|
e = sys.exc_info()[1]
|
|
1164
|
-
raise CmdError(
|
|
1165
|
-
"unhandled exception when running Python console: %s" % e)
|
|
1198
|
+
raise CmdError("unhandled exception when running Python console: %s" % e)
|
|
1166
1199
|
|
|
1167
1200
|
def do_quit(self, arg):
|
|
1168
1201
|
"""
|
|
@@ -1219,7 +1252,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1219
1252
|
if not targets:
|
|
1220
1253
|
if self.lastEvent is None:
|
|
1221
1254
|
raise CmdError("no current process set")
|
|
1222
|
-
targets = [
|
|
1255
|
+
targets = [self.lastEvent.get_pid()]
|
|
1223
1256
|
for pid in targets:
|
|
1224
1257
|
try:
|
|
1225
1258
|
debug.detach(pid)
|
|
@@ -1235,9 +1268,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1235
1268
|
raise CmdError("prefix not allowed")
|
|
1236
1269
|
cmdline = self.input_command_line(arg)
|
|
1237
1270
|
try:
|
|
1238
|
-
process = self.debug.execl(arg,
|
|
1239
|
-
bConsole=False,
|
|
1240
|
-
bFollow=self.options.follow)
|
|
1271
|
+
process = self.debug.execl(arg, bConsole=False, bFollow=self.options.follow)
|
|
1241
1272
|
print("Spawned process (%d)" % process.get_pid())
|
|
1242
1273
|
except Exception:
|
|
1243
1274
|
raise CmdError("can't execute")
|
|
@@ -1251,9 +1282,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1251
1282
|
raise CmdError("prefix not allowed")
|
|
1252
1283
|
cmdline = self.input_command_line(arg)
|
|
1253
1284
|
try:
|
|
1254
|
-
process = self.debug.execl(arg,
|
|
1255
|
-
bConsole=True,
|
|
1256
|
-
bFollow=self.options.follow)
|
|
1285
|
+
process = self.debug.execl(arg, bConsole=True, bFollow=self.options.follow)
|
|
1257
1286
|
print("Spawned process (%d)" % process.get_pid())
|
|
1258
1287
|
except Exception:
|
|
1259
1288
|
raise CmdError("can't execute")
|
|
@@ -1326,7 +1355,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1326
1355
|
if pid_list:
|
|
1327
1356
|
print("Process ID File name")
|
|
1328
1357
|
for pid in pid_list:
|
|
1329
|
-
if
|
|
1358
|
+
if pid == 0:
|
|
1330
1359
|
filename = "System Idle Process"
|
|
1331
1360
|
elif pid == 4:
|
|
1332
1361
|
filename = "System"
|
|
@@ -1373,7 +1402,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1373
1402
|
kill <processes and/or threads...> - kill the given processes and threads
|
|
1374
1403
|
"""
|
|
1375
1404
|
if arg:
|
|
1376
|
-
if arg ==
|
|
1405
|
+
if arg == "*":
|
|
1377
1406
|
target_pids = self.debug.get_debugee_pids()
|
|
1378
1407
|
target_tids = list()
|
|
1379
1408
|
else:
|
|
@@ -1458,7 +1487,9 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1458
1487
|
try:
|
|
1459
1488
|
stack_trace = thread.get_stack_trace_with_labels()
|
|
1460
1489
|
if stack_trace:
|
|
1461
|
-
print(
|
|
1490
|
+
print(
|
|
1491
|
+
CrashDump.dump_stack_trace_with_labels(stack_trace),
|
|
1492
|
+
)
|
|
1462
1493
|
else:
|
|
1463
1494
|
print("No stack trace available for thread (%d)" % tid)
|
|
1464
1495
|
except WindowsError:
|
|
@@ -1507,12 +1538,12 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1507
1538
|
code = thread.disassemble(pc, 16)[0]
|
|
1508
1539
|
size = code[1]
|
|
1509
1540
|
opcode = code[2].lower()
|
|
1510
|
-
if
|
|
1511
|
-
opcode = opcode[: opcode.find(
|
|
1512
|
-
if opcode in self.jump_instructions or opcode in (
|
|
1541
|
+
if " " in opcode:
|
|
1542
|
+
opcode = opcode[: opcode.find(" ")]
|
|
1543
|
+
if opcode in self.jump_instructions or opcode in ("int", "ret", "retn"):
|
|
1513
1544
|
return self.do_trace(arg)
|
|
1514
1545
|
address = pc + size
|
|
1515
|
-
# # print(hex(pc), hex(address), size # XXX DEBUG
|
|
1546
|
+
# # print(hex(pc), hex(address), size # XXX DEBUG
|
|
1516
1547
|
self.debug.stalk_at(pid, address)
|
|
1517
1548
|
return True
|
|
1518
1549
|
|
|
@@ -1571,21 +1602,21 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1571
1602
|
access = token_list[0].lower()
|
|
1572
1603
|
size = token_list[1]
|
|
1573
1604
|
address = token_list[2]
|
|
1574
|
-
if
|
|
1605
|
+
if access == "a":
|
|
1575
1606
|
access = debug.BP_BREAK_ON_ACCESS
|
|
1576
|
-
elif access ==
|
|
1607
|
+
elif access == "w":
|
|
1577
1608
|
access = debug.BP_BREAK_ON_WRITE
|
|
1578
|
-
elif access ==
|
|
1609
|
+
elif access == "e":
|
|
1579
1610
|
access = debug.BP_BREAK_ON_EXECUTION
|
|
1580
1611
|
else:
|
|
1581
1612
|
raise CmdError("bad access type: %s" % token_list[0])
|
|
1582
|
-
if
|
|
1613
|
+
if size == "1":
|
|
1583
1614
|
size = debug.BP_WATCH_BYTE
|
|
1584
|
-
elif size ==
|
|
1615
|
+
elif size == "2":
|
|
1585
1616
|
size = debug.BP_WATCH_WORD
|
|
1586
|
-
elif size ==
|
|
1617
|
+
elif size == "4":
|
|
1587
1618
|
size = debug.BP_WATCH_DWORD
|
|
1588
|
-
elif size ==
|
|
1619
|
+
elif size == "8":
|
|
1589
1620
|
size = debug.BP_WATCH_QWORD
|
|
1590
1621
|
else:
|
|
1591
1622
|
raise CmdError("bad breakpoint size: %s" % size)
|
|
@@ -1620,7 +1651,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1620
1651
|
bl <process> [process...] - list the breakpoints for each given process
|
|
1621
1652
|
"""
|
|
1622
1653
|
debug = self.debug
|
|
1623
|
-
if arg ==
|
|
1654
|
+
if arg == "*":
|
|
1624
1655
|
if self.cmdprefix:
|
|
1625
1656
|
raise CmdError("prefix not supported")
|
|
1626
1657
|
breakpoints = debug.get_debugee_pids()
|
|
@@ -1631,7 +1662,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1631
1662
|
if not targets:
|
|
1632
1663
|
if self.lastEvent is None:
|
|
1633
1664
|
raise CmdError("no current process is set")
|
|
1634
|
-
targets = [
|
|
1665
|
+
targets = [self.lastEvent.get_pid()]
|
|
1635
1666
|
for pid in targets:
|
|
1636
1667
|
bplist = debug.get_process_code_breakpoints(pid)
|
|
1637
1668
|
printed_process_banner = False
|
|
@@ -1640,20 +1671,18 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1640
1671
|
print("Process %d:" % pid)
|
|
1641
1672
|
printed_process_banner = True
|
|
1642
1673
|
for bp in bplist:
|
|
1643
|
-
address = repr(bp)[1:-1].replace(
|
|
1674
|
+
address = repr(bp)[1:-1].replace("remote address ", "")
|
|
1644
1675
|
print(" %s" % address)
|
|
1645
1676
|
dbplist = debug.get_process_deferred_code_breakpoints(pid)
|
|
1646
1677
|
if dbplist:
|
|
1647
1678
|
if not printed_process_banner:
|
|
1648
1679
|
print("Process %d:" % pid)
|
|
1649
1680
|
printed_process_banner = True
|
|
1650
|
-
for
|
|
1681
|
+
for label, action, oneshot in dbplist:
|
|
1651
1682
|
if oneshot:
|
|
1652
|
-
address = " Deferred unconditional one-shot"
|
|
1653
|
-
" code breakpoint at %s"
|
|
1683
|
+
address = " Deferred unconditional one-shot" " code breakpoint at %s"
|
|
1654
1684
|
else:
|
|
1655
|
-
address = " Deferred unconditional"
|
|
1656
|
-
" code breakpoint at %s"
|
|
1685
|
+
address = " Deferred unconditional" " code breakpoint at %s"
|
|
1657
1686
|
address = address % label
|
|
1658
1687
|
print(" %s" % address)
|
|
1659
1688
|
bplist = debug.get_process_page_breakpoints(pid)
|
|
@@ -1662,14 +1691,14 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1662
1691
|
print("Process %d:" % pid)
|
|
1663
1692
|
printed_process_banner = True
|
|
1664
1693
|
for bp in bplist:
|
|
1665
|
-
address = repr(bp)[1:-1].replace(
|
|
1694
|
+
address = repr(bp)[1:-1].replace("remote address ", "")
|
|
1666
1695
|
print(" %s" % address)
|
|
1667
1696
|
for tid in debug.system.get_process(pid).iter_thread_ids():
|
|
1668
1697
|
bplist = debug.get_thread_hardware_breakpoints(tid)
|
|
1669
1698
|
if bplist:
|
|
1670
1699
|
print("Thread %d:" % tid)
|
|
1671
1700
|
for bp in bplist:
|
|
1672
|
-
address = repr(bp)[1:-1].replace(
|
|
1701
|
+
address = repr(bp)[1:-1].replace("remote address ", "")
|
|
1673
1702
|
print(" %s" % address)
|
|
1674
1703
|
|
|
1675
1704
|
def do_bo(self, arg):
|
|
@@ -1806,7 +1835,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1806
1835
|
next_address = HexOutput.integer(next_address)
|
|
1807
1836
|
self.default_disasm_target = next_address
|
|
1808
1837
|
print("%s:" % label)
|
|
1809
|
-
# # print(CrashDump.dump_code(code))
|
|
1838
|
+
# # print(CrashDump.dump_code(code))
|
|
1810
1839
|
for line in code:
|
|
1811
1840
|
print(CrashDump.dump_code_line(line, bShowDump=False))
|
|
1812
1841
|
|
|
@@ -1863,20 +1892,22 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1863
1892
|
else:
|
|
1864
1893
|
addr_width = 16
|
|
1865
1894
|
for addr, bytes in iter:
|
|
1866
|
-
print(
|
|
1895
|
+
print(
|
|
1896
|
+
HexDump.hexblock(bytes, addr, addr_width),
|
|
1897
|
+
)
|
|
1867
1898
|
|
|
1868
1899
|
do_sh = do_searchhex
|
|
1869
1900
|
|
|
1870
|
-
# # def do_strings(self, arg):
|
|
1871
|
-
# # """
|
|
1872
|
-
# # [~process] strings - extract ASCII strings from memory
|
|
1873
|
-
# # """
|
|
1874
|
-
# # if arg:
|
|
1875
|
-
# # raise CmdError("too many arguments")
|
|
1876
|
-
# # pid, tid = self.get_process_and_thread_ids_from_prefix()
|
|
1877
|
-
# # process = self.get_process(pid)
|
|
1878
|
-
# # for addr, size, data in process.strings():
|
|
1879
|
-
# # print("%s: %r" % (HexDump.address(addr), data)
|
|
1901
|
+
# # def do_strings(self, arg):
|
|
1902
|
+
# # """
|
|
1903
|
+
# # [~process] strings - extract ASCII strings from memory
|
|
1904
|
+
# # """
|
|
1905
|
+
# # if arg:
|
|
1906
|
+
# # raise CmdError("too many arguments")
|
|
1907
|
+
# # pid, tid = self.get_process_and_thread_ids_from_prefix()
|
|
1908
|
+
# # process = self.get_process(pid)
|
|
1909
|
+
# # for addr, size, data in process.strings():
|
|
1910
|
+
# # print("%s: %r" % (HexDump.address(addr), data)
|
|
1880
1911
|
|
|
1881
1912
|
def do_d(self, arg):
|
|
1882
1913
|
"""
|
|
@@ -1983,12 +2014,12 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
1983
2014
|
if not arg:
|
|
1984
2015
|
self.print_current_location()
|
|
1985
2016
|
else:
|
|
1986
|
-
equ = arg.find(
|
|
2017
|
+
equ = arg.find("=")
|
|
1987
2018
|
if equ >= 0:
|
|
1988
2019
|
register = arg[:equ].strip()
|
|
1989
|
-
value = arg[equ + 1:].strip()
|
|
2020
|
+
value = arg[equ + 1 :].strip()
|
|
1990
2021
|
if not value:
|
|
1991
|
-
value =
|
|
2022
|
+
value = "0"
|
|
1992
2023
|
self.change_register(register, value)
|
|
1993
2024
|
else:
|
|
1994
2025
|
value = self.input_register(arg)
|
|
@@ -2021,7 +2052,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2021
2052
|
pid = self.get_process_id_from_prefix()
|
|
2022
2053
|
token_list = self.split_tokens(arg, 2)
|
|
2023
2054
|
address = self.input_address(token_list[0], pid)
|
|
2024
|
-
data = HexInput.hexadecimal(
|
|
2055
|
+
data = HexInput.hexadecimal(" ".join(token_list[1:]))
|
|
2025
2056
|
self.write_memory(address, data, pid)
|
|
2026
2057
|
|
|
2027
2058
|
# XXX TODO
|
|
@@ -2050,7 +2081,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2050
2081
|
try:
|
|
2051
2082
|
memoryMap = process.get_memory_map()
|
|
2052
2083
|
mappedFilenames = process.get_mapped_filenames()
|
|
2053
|
-
print(
|
|
2084
|
+
print("")
|
|
2054
2085
|
print(CrashDump.dump_memory_map(memoryMap, mappedFilenames))
|
|
2055
2086
|
except WindowsError:
|
|
2056
2087
|
msg = "can't get memory information for process (%d)"
|
|
@@ -2058,11 +2089,11 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2058
2089
|
|
|
2059
2090
|
do_m = do_memory
|
|
2060
2091
|
|
|
2061
|
-
|
|
2062
|
-
# Event handling
|
|
2092
|
+
# ------------------------------------------------------------------------------
|
|
2093
|
+
# Event handling
|
|
2063
2094
|
|
|
2064
|
-
# TODO
|
|
2065
|
-
# * add configurable stop/don't stop behavior on events and exceptions
|
|
2095
|
+
# TODO
|
|
2096
|
+
# * add configurable stop/don't stop behavior on events and exceptions
|
|
2066
2097
|
|
|
2067
2098
|
# Stop for all events, unless stated otherwise.
|
|
2068
2099
|
def event(self, event):
|
|
@@ -2076,7 +2107,7 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2076
2107
|
|
|
2077
2108
|
# Stop for breakpoint exceptions.
|
|
2078
2109
|
def breakpoint(self, event):
|
|
2079
|
-
if hasattr(event,
|
|
2110
|
+
if hasattr(event, "breakpoint") and event.breakpoint:
|
|
2080
2111
|
self.print_breakpoint_location(event)
|
|
2081
2112
|
else:
|
|
2082
2113
|
self.print_exception(event)
|
|
@@ -2130,8 +2161,8 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2130
2161
|
def output_string(self, event):
|
|
2131
2162
|
self.print_debug_string(event)
|
|
2132
2163
|
|
|
2133
|
-
|
|
2134
|
-
# History file
|
|
2164
|
+
# ------------------------------------------------------------------------------
|
|
2165
|
+
# History file
|
|
2135
2166
|
|
|
2136
2167
|
def load_history(self):
|
|
2137
2168
|
global readline
|
|
@@ -2141,15 +2172,14 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2141
2172
|
except ImportError:
|
|
2142
2173
|
return
|
|
2143
2174
|
if self.history_file_full_path is None:
|
|
2144
|
-
folder = os.environ.get(
|
|
2175
|
+
folder = os.environ.get("USERPROFILE", "")
|
|
2145
2176
|
if not folder:
|
|
2146
|
-
folder = os.environ.get(
|
|
2177
|
+
folder = os.environ.get("HOME", "")
|
|
2147
2178
|
if not folder:
|
|
2148
2179
|
folder = os.path.split(sys.argv[0])[1]
|
|
2149
2180
|
if not folder:
|
|
2150
2181
|
folder = os.path.curdir
|
|
2151
|
-
self.history_file_full_path = os.path.join(folder,
|
|
2152
|
-
self.history_file)
|
|
2182
|
+
self.history_file_full_path = os.path.join(folder, self.history_file)
|
|
2153
2183
|
try:
|
|
2154
2184
|
if os.path.exists(self.history_file_full_path):
|
|
2155
2185
|
readline.read_history_file(self.history_file_full_path)
|
|
@@ -2171,8 +2201,8 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2171
2201
|
e = sys.exc_info()[1]
|
|
2172
2202
|
warnings.warn("Cannot save history file, reason: %s" % str(e))
|
|
2173
2203
|
|
|
2174
|
-
|
|
2175
|
-
# Main loop
|
|
2204
|
+
# ------------------------------------------------------------------------------
|
|
2205
|
+
# Main loop
|
|
2176
2206
|
|
|
2177
2207
|
# Debugging loop.
|
|
2178
2208
|
def loop(self):
|
|
@@ -2181,14 +2211,12 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2181
2211
|
|
|
2182
2212
|
# Stop on the initial event, if any.
|
|
2183
2213
|
if self.lastEvent is not None:
|
|
2184
|
-
self.cmdqueue.append(
|
|
2214
|
+
self.cmdqueue.append("r")
|
|
2185
2215
|
self.prompt_user()
|
|
2186
2216
|
|
|
2187
2217
|
# Loop until the debugger is told to quit.
|
|
2188
2218
|
while not self.debuggerExit:
|
|
2189
|
-
|
|
2190
2219
|
try:
|
|
2191
|
-
|
|
2192
2220
|
# If for some reason the last event wasn't continued,
|
|
2193
2221
|
# continue it here. This won't be done more than once
|
|
2194
2222
|
# for a given Event instance, though.
|
|
@@ -2203,7 +2231,6 @@ class ConsoleDebugger (Cmd, EventHandler):
|
|
|
2203
2231
|
# Some debug events may cause the command prompt to be shown.
|
|
2204
2232
|
if self.debug.get_debugee_count() > 0:
|
|
2205
2233
|
try:
|
|
2206
|
-
|
|
2207
2234
|
# Get the next debug event.
|
|
2208
2235
|
debug.wait()
|
|
2209
2236
|
|