本帖最后由 小果子 于 2018-10-16 16:14 编辑
Visual Studio 可在 Windows 计算机本地和远程启动和调试 Python 应用程序(请参阅远程调试)。 它还可使用 ptvsd 库在其他操作系统、设备或除 CPython 外的 Python 实现中进行远程调试。 设置Linux计算机执行本演练需满足以下各项: - 在操作系统(如 Mac OSX 或 Linux)上运行 Python 的远程计算机。
- 该计算机防火墙上的 5678 端口(入站)处于开启状态,这是远程调试的默认设置。(或者其他端口)
准备调试脚本
1. 在远程计算机上,使用下面的代码创建名为 guessing-game.py 的 Python 文件:- # guessing-game.py
- import random
- guesses_made = 0
- name = input('Hello! What is your name?\n')
- number = random.randint(1, 20)
- print('Well, {0}, I am thinking of a number between 1 and 20.'.format(name))
- while guesses_made < 6:
- guess = int(input('Take a guess: '))
- guesses_made += 1
- if guess < number:
- print('Your guess is too low.')
- if guess > number:
- print('Your guess is too high.')
- if guess == number:
- break
- if guess == number:
- print('Good job, {0}! You guessed my number in {1} guesses!'.format(name, guesses_made))
- else:
- print('Nope. The number I was thinking of was {0}'.format(number))
复制代码 2. 使用 `pip3 install ptvsd` 将 `ptvsd` 包安装到环境中。(推荐使用版本:`4.1.2`)
3. 将以下代码添加到 `guessing-game.py` 中其他代码前的最早可能点处,启用远程调试。 (虽然不是严格要求,但不能调试调用 `enable_attach` 函数前生成的任何后台线程。)
- import ptvsd
- # 允许其他电脑通过此ip地址和端口连接到ptvsd
- ptvsd.enable_attach(address=('0.0.0.0', 5678), redirect_output=True)
- # 暂停程序,直到远程调试器连接
- ptvsd.wait_for_attach()
- # 如果附加了一个远程调试器,则暂停所有线程的执行,并以当前线程作为活动的线程进入调试器。
- ptvsd.break_into_debugger() # 如果已附加调试器,它将作为编程断点
复制代码 4. 开启远程调试端口
- zg@ubuntu:~$ nc -lp 5678 &
- [1] 3950
- # linux查看端口
- zg@ubuntu:~$ netstat -an | grep 5678
- tcp 0 0 0.0.0.0:5678
复制代码 5. 保存文件并运行 `python3 guessing-game.py`。 另外,当你与程序进行交互时,对 `enable_attach` 的调用将在后台运行并等待传入连接。 需要时,可在 `enable_attach`后调用 `wait_for_attach` 函数以阻止程序,直到附加调试器。
从 Python 工具远程附加在这些步骤中,我们将设置简单断点以停止远程进程。 1. 在本地计算机上创建远程文件的副本,然后在 Visual Studio 中打开它。 文件位置并不重要,但其名称应与远程计算机上的脚本名称匹配。 2. 可选)若要在本地计算机上安装适用于 ptvsd 的 IntelliSense,请将 ptvsd 包安装到 Python 环境中。 3. 选择“调试” > “附加到进程”。 4. 在出现的“附加到进程”对话框中,将“连接类型”设置为“Python 远程(ptvsd)”。 (在旧版本的 Visual Studio 中,这些命令被称为“传输”和“Python 远程调试”。) 5. 在“连接目标”字段(旧版本中为“限定符”)中,输入 tcp://@ip_address:5678,其中 `ip_address` 是远程计算机(可以是显式地址或名称,如 xxx.xxx.xxx.xxx),而 :5678 是远程调试的端口号。 6. 按 Enter 填充该计算机上可用 ptvsd 进程的列表:
如果在填写此列表后碰巧在远程机器上启动了另一个程序,请选择“刷新”按钮。 7. 选择要调试的进程,然后选择“附加”,或双击该进程。
8. `Visual Studio` 将切换为调试模式,而脚本继续在远程计算机上运行,并提供所有常用调试功能。 例如,在 if guess < number: 行上设置断点,然后切换到远程计算机上,输入其他猜测。 执行此操作后,本地计算机上的 `Visual Studio` 将在该断点处停止、显示局部变量等:
9. 停止调试后,Visual Studio 将与远程计算机上继续运行的程序分离。 ptvsd 还会继续侦听附加调试器,因此可以随时重新附加到该进程。
|