IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> # 用 PyCharm 进行远程调试debugger-配置远程解释器 -> 正文阅读

[开发工具]# 用 PyCharm 进行远程调试debugger-配置远程解释器

一、用 PyCharm 进行远程调试debugger

官网:Remote Debugging with PyCharm 用 PyCharm 进行远程调试
https://www.jetbrains.com/help/pycharm/remote-debugging-with-product.html

This is a Professional feature: download PyCharm Professional to try.
这是一个PyCharm 专业版的功能: 下载 PyCharm Professional 试试。

使用 PyCharm,您可以使用位于另一台计算机上的解释器调试应用程序,例如,在 web 服务器或专用测试机器上。

提供了两种远程调试的方法:

  • Through a remote interpreter.
    使用此方法可以利用远程计算机上可用的扩展调试功能。
    要求: 从本地机器到远程服务器的 SSH 访问。

  • Using the Python remote debug server configuration. 使用 Python 远程[调试服务器配置](Remote debugging with the Python remote debug server configuration)。
    使用此方法将调试过程集成到远程服务器上的一系列正在运行的进程中。如果您不能显式地运行应用程序进行调试,或者需要进行某些准备工作,那么这可能会有所帮助。
    要求: 通过 SSH 从本地机器访问远程服务器,使用任何预定义的端口从远程服务器访问本地机器。

方法1:我们配置了远程解释器,将脚本部署到远程主机,调试了脚本。
方法2:我们创建一个调试配置(调试服务器),启动调试服务器。在远程计算机上执行 Python 脚本,在本地机器上调试脚本。

您的代码实际上在远程主机上执行,但在本地机器上调试。

1. 方法1:我们配置了远程解释器

该方案简单高效!
但是,注意它的要求:
要求: 通过 SSH 从本地机器访问远程服务器,使用任何预定义的端口从远程服务器访问本地机器。

注意,同方法2,必须远端可以主动连接到本地。

1.1 pycharm可以远程解释器运行,但是不能debug

单独在远程执行
python -u /root/.pycharm_helpers/pydev/pydevd.py --multiproc --client 0.0.0. 0 --port 37990
报错:

Could not connect to 0.0.0.0: 37990
Traceback (most recent call last):
  File "/root/.pycharm_helpers/pydev/_pydevd_bundle/pydevd_comm.py", line 456, in start_client
    s.connect((host, port))
ConnectionRefusedError: [Errno 111] Connection refused
Traceback (most recent call last):
  File "/root/.pycharm_helpers/pydev/pydevd.py", line 2173, in <module>
    main()
  File "/root/.pycharm_helpers/pydev/pydevd.py", line 2055, in main
    dispatcher.connect(host, port)
  File "/root/.pycharm_helpers/pydev/pydevd.py", line 1826, in connect
    self.client = start_client(self.host, self.port)
  File "/root/.pycharm_helpers/pydev/_pydevd_bundle/pydevd_comm.py", line 456, in start_client
    s.connect((host, port))
ConnectionRefusedError: [Errno 111] Connection refused

问题原因分析:
要求: 通过 SSH 从本地机器访问远程服务器,使用任何预定义的端口从远程服务器访问本地机器。

注意,同方法2,必须远端可以主动连接到本地。

2. 方法2 使用 Python 远程调试服务器配置

从主菜单中选择 Run | Edit Configuration… 。运行/调试配置对话框打开。您必须单击工具栏,然后从可用配置列表中选择 pythondebug Server。

从主菜单中选择 Run | Edit Configuration… 。运行/调试配置对话框打开。您必须单击工具栏,然后从可用配置列表中选择 pythondebug Server。

在这里插入图片描述输入此运行/调试配置的名称——设为 MyRemoteServer。指定运行 IDE 的机器的端口号(这里是12345)和 IDE 主机名(这里是172.20.208.95)。远程调试服务器将使用这些参数来访问它。

根据IDE界面的提醒,安装对应的pydevd-charm。执行 pydevd_pycharm.settrace

将本地机器上的路径映射到远程机器上的路径:
在这里插入图片描述
使用步骤:

  1. IDE 启动后,会显示自己再监听状态。 然后在Pycharm中设置断点。

  2. 然后运行远端的py程序,使用命令行执行(并非在IDE中,是在远端命令执行)

修改源代码文件如下:

import math
#==============this code added==================================================================:
import pydevd_pycharm

pydevd_pycharm.settrace('172.20.208.95', port=12345, stdoutToServer=True,
                        stderrToServer=True)
#================================================================================================
class Solver:

    def demo(self, a, b, c):
        d = b ** 2 - 4 * a * c
        if d > 0:
            disc = math.sqrt(d)
            root1 = (-b + disc) / (2 * a)
            root2 = (-b - disc) / (2 * a)
            return root1, root2
        elif d == 0:
            return -b / (2 * a)
        else:
            return "This equation has no roots"

if __name__ == '__main__':
    solver = Solver()

while True:
    a = int(input("a: "))
    b = int(input("b: "))
    c = int(input("c: "))
    result = solver.demo(a, b, c)
    print(result)

如上,可以看到该方法对代码有侵入!

注意事项: 如果将程序部署到远端,那么需要Remote Debug配置中的localhost修改为安装Pycharm主机的IP地址,同时将PycharmRemoteDebug.py中的localhost改为同样的IP地址;
在这里插入图片描述使用Pycharm的Deployment功能映射远程和本地代码;
断点命中时,客户端程序处于暂定状态;
如果没有开启Remote Debug Server,运行客户端会卡住;
不需要使用Remote Debug时一定不要在程序启动的时候import PycharmRemoteDebug模块;

总结: 因此,此方案,必须保证远端环境可以主动连接到你IDE本地环境!

2.2 远程调试原理

如果程序部署在远端,要在本地获取程序运行状态并进行断点调试,必然需要连接到程序并进行通讯。利用Pycharm进行远程调试过程中,Pycharm充当服务器的角色。

首先,对Pycharm Run/Debug Configures进行配置,指定Pycharm安装端的一些属性,比如Pycharm所在主机的IP地址和端口号等。

然后,启动Pycharm的远程调试。这时Pycharm处于监听状态,等待独立于IDE之外运行的程序的连接。

其次,在远端程序刚启动时,需要根据Pycharm Debug Configures中的配置信息,连接到Pycharm。
在这里插入图片描述

最后,连接成功之后,当远程客户端运行到本地Pycharm中设置的断点处时,便会在断点处暂停程序的执行,而在本地Pycharm命中断点处能够看到远端程序当前运行的状态和调用栈等信息并进行下一步跟踪和逐步调试。

本地Pycharm中调试的源代码工程应和远端运行的程序源代码保持一致。Pycharm中Remote Debug Configure的配置要保证能够被远程连接。

由于远程客户端使用Pycharm提供的pydevd模块连接到本地的Pycharm remote Debug,两者通讯链接均遵循Pycharm自定义的协议。因此我们不必关心Pycharm设置断点和远程客户端命中断点过程中两端具体的实现和处理过程,只要保证我们的Debug Configure有效即可。然后在需要的地方通过断点暂定程序,分析当前程序状态找出问题所在。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:02:19  更:2021-08-06 10:03:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 13:26:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码