飞翔的灵蛇——PyCharm远程调试

开发 开发工具
远程调试其实只有两个要点,pydev帮我们解决了远程断点、启动的问题;我们自己要解决代码同步的问题。文章都是用虚拟机来做开发环境的,你也可以用一台公用的机器来做开发环境。这种情况下你就必须用下面的方式开启文件同步了。

公司要用Python开发一个基于Linux的系统,我是不可能忍受把我的“高端Mac”换成矮挫丑的Linux的(更何况还要考虑团队中有很多同事用Windows)。借助PyCharm的远程调试可以实现“本地写代码,远程Debug”

配置PyCharm远程调试

选择Project Interpreter的时候我们是可以选择“Add Remote”

打开之后是一片“新大陆”

我们先通过SSH配置,输入服务器的地址,账号密码,勾选服务器端的Python路径。确定之后PyCharm会把在远程机器上安装Python Helpers(默认安装在Home目录下的.pycharm_helpers,比如我用的是fireflyc所以目录是/home/fireflyc/.pycharm_helpers)。

这里最关键的一个步骤——Path Maping。它是本地路径和服务器路径的映射关系,当我们在本地执行Debug的时候代码其实是在远程Linux上执行的,这必须解决一个问题——如何把代码同步到远程Linux上。最简单的办法是通过VMware装一个虚拟机,用"文件共享"的方式。

设置完成后需要在Path Maping中新增映射关系

LocalPath是工程的根目录,Remote Path是共享文件夹所在目录

执行一下,“如丝般顺滑”,还能打断点。

远程调试的原理

远程调试不是什么黑魔法,它是IDE工具发展的一种倾向——细分前端和后端。前端偏向于完成代码编辑、呈现工作相当于设置一个框架;后端则是针对某个语言的语法加亮、代码提示、自动完成、代码格式化、调试。比如visual code在这一点上表现的就非常明显,VSC只提供了一个“编辑器”的功能,每个语言的加亮、代码提示、格式化、调试都是通过“插件”实现的。这个插件不是传统意义上的“静态”的,而是一个独立的进程。visual code称这个为language server,并且制定了一个Language Server Protocol的规范。有兴趣的朋友可以去看一下或者尝试自己写一个插件。

PyCharm还没有这么彻底,它只是把Debug部分做成一个单独的Server。去看一下“神秘”的.pycharm_helpers就一目了然了

PyCharm远程调试的时候我们偷偷的看一下进程

真相大白了。原理其实很简单,调试的时候PyCharm通过SSH执行远程Linux上的pydev,这个进程会执行本地的python代码。pydev和Pycharm会有网络通讯用来传递“打断点、取消断点、单步执行”之类的调试动作,端口是——45140。

自动化开发环境

解决了远程调试的问题后顺带可以解决一下“开发环境”的问题;每个人都去新建一台虚拟机会比较麻烦,***可能选择的发行版本千奇百怪。所以通过vagrant来管理“开发虚拟机”是一种很好的实践。

这段脚本会生成一个ubuntu/trusty64镜像的虚拟机(ubuntu 14),使用的是virtualbox;把虚拟机的8000端口映射成本机的8000端口;设置共享目录(我的Vagrantfile在工程根目录下的dev文件夹,所以../其实就是工程根目录);设置虚拟机***次启动的时候执行的脚本(会设置软件的源,关闭防火墙之类的)

通过上面的配置整个开发环境就自动化了,开发人员拿到代码之后执行切换到dev目录下执行vagrant up,然后选择

PathMapping系统会为我们自动添加上(根据vagrantfile的配置)

Vagrant小结

Vagrant是一个定义虚拟机的配置工具,你可以用一段Ruby脚本设置自己虚拟机的大小、配置、使用的虚拟化软件,之后执行vagrant up就会自动创建出一台虚拟机。

Vagrant会自动生成一个vagrant的用户同时生成一对SSH密钥,私钥会放在.vagrant文件夹下(执行vagrant up后会看到有一个.vagrant文件夹的)。我们执行vagrant ssh xxx的时候会自动使用这个私钥登录。所以PyCharm的配置其实还是通过SSH,原理并没有变。

关于Docker

PyCharm还支持Docker,但是我觉得这个并没有什么用。在MacOS、Windows上Docker其实是先启动一台虚拟机里面装上Linux然后在里面装Docker。

总结

远程调试其实只有两个要点,pydev帮我们解决了远程断点、启动的问题;我们自己要解决代码同步的问题。文章都是用虚拟机来做开发环境的,你也可以用一台公用的机器来做开发环境。这种情况下你就必须用下面的方式开启文件同步了。

***补充一点,我推荐用vagrant的方式它可以帮我们“规范化虚拟机”;如果你开发的程序必须用root启动(vagrant是用vagrant用户启动的)那么只能用ssh了。(我们也可以只让vagrant帮我们生成虚拟机,我们自己进去修改root的密码,然后通过ssh连接进去。)

【本文是51CTO专栏作者邢森的原创文章,转载请联系作者本人获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 写程序的康德
相关推荐

2010-03-10 11:00:26

Zend Studio远程调试

2012-09-17 13:49:31

2009-11-23 14:32:55

Visual Stud

2022-08-15 20:48:28

Chrome安卓网页

2020-05-21 15:53:59

远程调试工具

2009-04-10 09:07:14

2011-08-31 16:51:12

Lua调试器

2009-09-07 23:27:59

WLAN无线网络3G移动系统H3C

2017-05-16 09:44:00

网络存储NAS企业存储

2013-05-29 14:54:49

Visual Stud

2009-06-03 08:30:30

禚佳春法航华为

2010-03-16 15:42:26

Java远程配置

2010-07-12 10:03:25

SQL Serverr

2011-02-23 09:35:25

Eclipse远程调试

2011-08-24 11:08:09

Lua

2023-11-10 09:20:28

Java工具

2023-12-13 08:17:24

JPDAJavaDebug

2021-02-02 13:31:35

Pycharm系统技巧Python

2014-10-11 16:30:49

机场信息化华为

2021-03-22 11:20:10

数据中心科技数字化转型
点赞
收藏

51CTO技术栈公众号