PyCharm远程调试Python的三种方式

版权声明:本文为博主原创文章,未经博主允许不得转载。

在使用PySpark开发集群任务时,由于集群资源访问权限的限制,只能在开发机上运行,本地无法自测。

开发机上调试的时候,可通过在开发机上启动spark shell进行交互式调试,但需要把写好的代码按顺序复制进spark shell中才能调试。这样做不仅要把写好的代码再按照spark shell格式整理一遍,对于结构比较复杂的代码,更耗时耗力,而且容易出错。另一方面,由于考虑到要在spark shell中调试,会有意无意把代码的结构写的简单,便于代码复制,即为了便于调试舍弃代码的抽象化、模块化、结构化。

在开发机上虽然可以通过 python pdb 单步调试,但不够直观,效率也不是很高。

自然而然的想到了能不能在本机进行开发机的远程调试。本文列举出三种方式解决远程调试。

一、PyCharm 的 Python Remote Debug

在Python Remote Debug的模式下,PyCharm(IDE)作为服务端(Server)启动调试,开发机则作为客户端(Client)启动。

因此使用 PyCharm 的 Python Remote Debug 进行远程调试,需要在本地开发环境中设定 IP 和端口并启动,PyCharm 会对设定的端口进行监听,等待客户端连接请求。

具体步骤如下:

1. 开发机上安装 pydevd

PyCharm 对于 Python Remote Debug 远程调试提供了pydevd模块,在 PyCharm 安装路径下的debug-eggs文件夹下,pycharm-debug.egg用于Python2,pycharm-debug-py3k.egg则用于Python3。

  • 可直接在开发机上 pip install pydevd
  • 若无权限可将 pycharm-debug.egg 复制到开发机,把该文件添加到Python引用路径中
    如 export PYTHONPATH=$PYTHONPATH:/home/…/pycharm-debug.egg

可启动Python,输入import pydevd,没报错说明安装成功

开发机安装该库后,就可以调用pydevd.settrace方法,该方法会指定 IDE 所在机器的 IP 和监听端口号,用于与IDE建立连接;建立连接后,便可在IDE中对开发机中的程序进行单步调试。

2.本地PyCharm配置Python Remote Debug

Python Remote Debug配置如下:

  • 【Run】->【Edit Configurations】->【Add New Configuration】->【Python Remote Debug】

  • 填写Local host namePort,其中Local host name指的是本机开发环境的IP地址,而Port则随便填写一个10000以上的即可

    Windows可直接用ipconfig命令查看IPv4地址,对于使用VPN,Local host name则为VPN适配器的IPv4地址
    由于开发机需要连接至本地开发环境,因此要保证开发机可以访问本地IP,可直接在开发机 ping 本地ip验证

  • 配置 Path mappings,Local path 为项目在本地的位置,Remote path为项目在开发机的位置
    在这里插入图片描述

  • 【Apply】and【OK】

在这里插入图片描述

3.在开发机需要调试的代码中加入调试监控代码

将配置好的Python Remote Debug中的 Update your script 下方代码插入至开发机的代码中

import pydevd
pydevd.settrace('10.4.×.×', port=11234, stdoutToServer=True, stderrToServer=True)

注意如果在开发机源代码中插入两行调试监控代码,也需要在本地代码的相应位置中插入两行(空行即可),否则远程调试断点会串行。

4.本地 PyCharm 启动 Debug Server

在待远程调试的代码中打好断点

选中配置好的Python Remote Debug,进行 Debug,启动并处于监听状态,在 Console 中显示如下:

Starting debug server at port 11234
Use the following code to connect to the debugger:
import pydevd
pydevd.settrace('10.4.×.×', port=11234, stdoutToServer=True, stderrToServer=True)
Waiting for process connection...

5.开发机中运行配置好的Python代码

使用脚本启动应用程序,执行到pydevd.settrace时,便会与本地开发环境中的PyCharm建立通讯连接

如下图所示,就可以在本地 PyCharm 中打断点单步调试了

对于申请资源要花费很长时间的任务(如spark任务),可结合【Jump to cursor】与参数赋值,在不释放资源的情况下不断调试,可节省大部分等待时间

注意:包之间跳转要用 Step into(F7),Resume Program(F9)不会进被调用包中
在这里插入图片描述

可以查看spark dataframe的参数属性

在这里插入图片描述

通过Evaluate调试并查看结果

在这里插入图片描述

在开发机中,就会等待本地单步调试进度,执行并打印日志

在这里插入图片描述

二、使用 PyCharm 远程解释器

参照博文 Pycharm配置远程调试,通过 远程部署配置远程解释器配置 实现远程调试,以下图片摘自这篇文章。

但不论是部署还是解释器配置,都需要远程开发机的账号、密码,由于公司是通过堡垒机登陆开发机,无法使用该方法。

img

img

三、IDEA的Remote和使用JVM的Xdebug

如果语言使用Java或Scala,IDE使用IntelliJ IDEA,可以使用使用JVM的Xdebug和IDEA的Remote进行远程调试。

可参照 idea远程调试 spark ,相对较简单。该方式正好与 PyCharm 中的Python Remote Debug模式相反,开发机作为服务端(Server)启动调试,本地IntelliJ IDEA则作为客户端(Client)启动。

但对于Python来说,即使用IDEA编辑Python,使用该方式,虽然可以和开发机调通,但无法实现断点单步调试。

这里写图片描述

参考文章:

利用PyCharm进行Python远程调试

Pycharm配置远程调试

idea远程调试 spark


--------------------------文档信息--------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载
署名(BY) :dkjkls(dkj卡洛斯)
文章出处:http://blog.csdn.net/dkjkls

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyCharm提供了一种方便的远程调试功能,可以帮助你在远程服务器上调试你的代码。下面是进行远程调试的步骤: 1. 配置远程服务器:在PyCharm中,打开"Preferences"(或"Settings")窗口,然后选择"Build, Execution, Deployment" -> "Deployment"。点击"+"按钮添加一个新的远程服务器配置,并填写相关信息,例如主机名、端口、用户名和密码等。 2. 配置远程Python解释器:在"Preferences"(或"Settings")窗口中,选择"Project" -> "Python Interpreter"。点击右上角的设置图标,选择"Add..."来添加一个新的远程解释器。选择"SSH Interpreter"并选择之前配置的远程服务器。按照提示填写相关信息,例如Python解释器路径和远程路径映射等。 3. 配置远程调试:在PyCharm中,打开你要调试的项目。点击菜单栏中的"Run" -> "Edit Configurations...",然后点击"+"按钮添加一个新的远程调试配置。选择"Python Remote Debug",并填写相关信息,例如主机名和端口等。 4. 启动远程调试:在PyCharm中,点击菜单栏中的"Run" -> "Debug 'your_configuration_name'"来启动远程调试会话。PyCharm会连接到远程服务器,并在调试模式下运行你的代码。 5. 设置断点:在你想要调试的代码行上设置断点。当程序运行到这个断点时,会暂停执行并进入调试模式,你可以逐步执行代码并观察变量的值。 这样,你就可以在PyCharm中进行远程调试了。希望对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值