Fusion360-Addons/python/Lib/site-packages/ptvsd/_attach.py
2021-10-31 19:12:13 +01:00

43 lines
1.3 KiB
Python

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See LICENSE in the project root
# for license information.
import os.path
import sys
import ptvsd
import pydevd
def attach_main(address, pid, *extra, **kwargs):
hostname, port_num = address
ptvsd_path = os.path.join(ptvsd.__file__, '../..')
pydevd_attach_to_process_path = os.path.join(
os.path.dirname(pydevd.__file__),
'pydevd_attach_to_process')
sys.path.append(pydevd_attach_to_process_path)
from add_code_to_python_process import run_python_code
# The code must not contain single quotes. Also, it might be running on
# a different Python version once it's injected. Encoding string literals
# as raw UTF-8 byte values takes care of both.
code = '''
ptvsd_path = bytearray({ptvsd_path}).decode("utf-8")
hostname = bytearray({hostname}).decode("utf-8")
import sys
sys.path.insert(0, ptvsd_path)
import ptvsd
del sys.path[0]
from ptvsd._remote import attach
attach((hostname, {port_num}))
'''
code = code.format(
ptvsd_path=repr(list(ptvsd_path.encode('utf-8'))),
hostname=repr(list(hostname.encode('utf-8'))),
port_num=port_num)
run_python_code(pid, code, connect_debugger_tracing=True)