| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- # Copyright (c) Microsoft Corporation. All rights reserved.
- # Licensed under the MIT License. See LICENSE in the project root
- # for license information.
- """Script injected into the debuggee process during attach-to-PID."""
- import os
- __file__ = os.path.abspath(__file__)
- _debugpy_dir = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
- def attach(setup):
- log = None
- try:
- import sys
- if "threading" not in sys.modules:
- try:
- def on_warn(msg):
- print(msg, file=sys.stderr)
- def on_exception(msg):
- print(msg, file=sys.stderr)
- def on_critical(msg):
- print(msg, file=sys.stderr)
- pydevd_attach_to_process_path = os.path.join(
- _debugpy_dir,
- "debugpy",
- "_vendored",
- "pydevd",
- "pydevd_attach_to_process",
- )
- assert os.path.exists(pydevd_attach_to_process_path)
- sys.path.insert(0, pydevd_attach_to_process_path)
- # NOTE: that it's not a part of the pydevd PYTHONPATH
- import attach_script
- attach_script.fix_main_thread_id(
- on_warn=on_warn, on_exception=on_exception, on_critical=on_critical
- )
- # NOTE: At this point it should be safe to remove this.
- sys.path.remove(pydevd_attach_to_process_path)
- except:
- import traceback
- traceback.print_exc()
- raise
- sys.path.insert(0, _debugpy_dir)
- try:
- import debugpy
- import debugpy.server
- from debugpy.common import json, log
- import pydevd
- finally:
- assert sys.path[0] == _debugpy_dir
- del sys.path[0]
- py_db = pydevd.get_global_debugger()
- if py_db is not None:
- py_db.dispose_and_kill_all_pydevd_threads(wait=False)
- if setup["log_to"] is not None:
- debugpy.log_to(setup["log_to"])
- log.info("Configuring injected debugpy: {0}", json.repr(setup))
- if setup["mode"] == "listen":
- debugpy.listen(setup["address"])
- elif setup["mode"] == "connect":
- debugpy.connect(
- setup["address"], access_token=setup["adapter_access_token"]
- )
- else:
- raise AssertionError(repr(setup))
- except:
- import traceback
- traceback.print_exc()
- if log is None:
- raise
- else:
- log.reraise_exception()
- log.info("debugpy injected successfully")
|