PyCharm提供的远程调试功能,使用PyCharm进行调试首先需要在PyCharm中配置Remote Debug Server,在其文档里对此配置有清楚的描述,这里就不再记录了。

在完成配置之后,在待调试的代码中需要执行相应代码,让其连上Debug Server,之后就能开始进行调试,将PyCharm安装目录下的pycharm-debug.egg添加到Python Path,加入下面这段代码即可,

import pydevd
pydevd.settrace(ip, port=port, suspend=False)

如果要断开调试,则执行,

import pydevd
pydevd.stoptrace()

PyCharm远程调试的方式是让被调试进程主动连接到PyCharm中的Debug Server上,这个模式存在一些不便之处。远程调试你的Python代码这篇文章,对此说明的比较清楚。文中提到可以换用ptvsd来进行调试,不过PyCharm对此不支持。

实际上如果让pydevd.settrace这个函数不是在程序启动的时候执行而是需要调试的时候动态执行就可以绕开问题。按照这个思路去想的话,在本地机器想调试远端进程,需要将本地配置的Debug Server的ip、port发送到服务端,服务端需要能够接收这个参数,并调用settrace代码。自然的,又想到了使用RPyC来完成这个任务。

按照之前介绍的方式启动RPyC Server,然后实现一个单独脚本用于连接RPyC Server,调用settrace函数。这样就能够实现远程调试的目标。

总结一下,进行远程调试需要的步骤有,

  1. PyCharm配置Remote Debug,注意设置Path Mapping
  2. 服务端启动RPyC服务,用以监听远程调试请求
  3. 本地运行独立脚本调用RPyC服务来触发远程调试

这个方式存在一个风险,pydevd.settrace如果连不上Debug Server,会等待一段时间。因此如果提供了错误的Debug Server地址,可能会让服务端进行卡死。除此之外,应该一切OK,依然可以在PyCharm中愉快玩耍。