易学智能

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3437|回复: 5

[python] Visual Studio 2017 在Linux上远程调试Python代码

[复制链接]

14

主题

153

帖子

664

积分

等待验证会员

积分
664
发表于 2018-9-26 08:10:03 | 显示全部楼层 |阅读模式
本帖最后由 小果子 于 2018-10-16 16:14 编辑

Visual Studio 可在 Windows 计算机本地和远程启动和调试 Python 应用程序(请参阅远程调试)。 它还可使用 ptvsd 库在其他操作系统、设备或除 CPython 外的 Python 实现中进行远程调试。
设置Linux计算机
执行本演练需满足以下各项:
  • 在操作系统(如 Mac OSX 或 Linux)上运行 Python 的远程计算机。
  • 该计算机防火墙上的 5678 端口(入站)处于开启状态,这是远程调试的默认设置。(或者其他端口)
准备调试脚本
1. 在远程计算机上,使用下面的代码创建名为 guessing-game.py 的 Python 文件:
  1. # guessing-game.py

  2. import random

  3. guesses_made = 0
  4. name = input('Hello! What is your name?\n')
  5. number = random.randint(1, 20)
  6. print('Well, {0}, I am thinking of a number between 1 and 20.'.format(name))

  7. while guesses_made < 6:
  8.     guess = int(input('Take a guess: '))
  9.     guesses_made += 1
  10.     if guess < number:
  11.         print('Your guess is too low.')
  12.     if guess > number:
  13.         print('Your guess is too high.')
  14.     if guess == number:
  15.         break
  16. if guess == number:
  17.     print('Good job, {0}! You guessed my number in {1} guesses!'.format(name, guesses_made))
  18. else:
  19.     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` 函数前生成的任何后台线程。)
  1. import ptvsd
  2. # 允许其他电脑通过此ip地址和端口连接到ptvsd
  3. ptvsd.enable_attach(address=('0.0.0.0', 5678), redirect_output=True)

  4. # 暂停程序,直到远程调试器连接
  5. ptvsd.wait_for_attach()

  6. # 如果附加了一个远程调试器,则暂停所有线程的执行,并以当前线程作为活动的线程进入调试器。
  7. ptvsd.break_into_debugger() # 如果已附加调试器,它将作为编程断点
复制代码
4. 开启远程调试端口
  1. zg@ubuntu:~$ nc -lp 5678 &
  2. [1] 3950
  3. # linux查看端口
  4. zg@ubuntu:~$ netstat -an | grep 5678
  5. 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 进程的列表:
1_1.png
如果在填写此列表后碰巧在远程机器上启动了另一个程序,请选择“刷新”按钮。
7. 选择要调试的进程,然后选择“附加”,或双击该进程。
8. `Visual Studio` 将切换为调试模式,而脚本继续在远程计算机上运行,并提供所有常用调试功能。 例如,在 if guess < number: 行上设置断点,然后切换到远程计算机上,输入其他猜测。 执行此操作后,本地计算机上的 `Visual Studio` 将在该断点处停止、显示局部变量等: 1_2.png
9. 停止调试后,Visual Studio 将与远程计算机上继续运行的程序分离。 ptvsd 还会继续侦听附加调试器,因此可以随时重新附加到该进程。




回复

使用道具 举报

665

主题

1234

帖子

6683

积分

xdtech

Rank: 5Rank: 5

积分
6683
发表于 2018-9-26 08:31:15 | 显示全部楼层
3. 将以下代码添加到 `guessing-game.py` 中其他代码前的最早可能点处,启用远程调试。 (虽然不是严格要求,但不能调试调用 `enable_attach` 函数前生成的任何后台线程。)

代码呢?
回复

使用道具 举报

14

主题

153

帖子

664

积分

等待验证会员

积分
664
 楼主| 发表于 2018-9-26 08:42:12 | 显示全部楼层
shaoheshaohe 发表于 2018-9-26 08:31
3. 将以下代码添加到 `guessing-game.py` 中其他代码前的最早可能点处,启用远程调试。 (虽然不是严格要求 ...

不小心放到条目2下面去了,已改好
回复

使用道具 举报

2

主题

28

帖子

77

积分

注册会员

Rank: 2

积分
77
发表于 2018-10-9 08:03:47 | 显示全部楼层
学习到了,很爽!
回复

使用道具 举报

5

主题

41

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2018-10-9 11:07:47 | 显示全部楼层
mark,mark,学习学习
回复

使用道具 举报

4

主题

37

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2018-10-9 11:09:26 | 显示全部楼层
收藏了,好文章
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易学智能

GMT+8, 2024-12-22 13:08 , Processed in 0.024379 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表