vs2013下的python远程调试支持(1)

vs2013下通过PTVS插件可以很好的支持本地Python调试,而其远程调试功能却形同鸡肋。因为虽然PTVS也提供了一个远程调试的功能,但却只能连接到远程的windows主机,无法连接到Linux主机。

vs2013下的python远程调试支持(1)_第1张图片

本文尝试让vs2013能够直接连接到远程的Linux主机上进行调试。

1    设计方案

下面就是一个本文希望实现的设想:

vs2013下的python远程调试支持(1)_第2张图片

首先准备一个PythonWrapperConsole应用程序,配置PTVS使其认为这是python的解释器:

vs2013下的python远程调试支持(1)_第3张图片

PTVS调用此程序时,PythonWrapper相应地调用远程Linux主机上的python

这里需要注意的是,Python调试接口的输出不能直接发送给PTVS,这是因为PTVS对于网络连接做了一个限制,只接受来自于localhost的连接。

2    交互窗口的实现

PTVS实现了一个Python交互运行的窗口:

vs2013下的python远程调试支持(1)_第4张图片

当在此窗口中执行第一条命令时,PTVS将调用我们的PythonWrapper,其调用参数如下:

vs2013下的python远程调试支持(1)_第5张图片

分析一下此文件再结合PTVS的源码,不难发现PTVS的实现流程如下:

首先PTVS打开一个TCP服务端口,再将此端口做为参数调用指定的python脚本,在此脚本中python将连接到此端口,后继的所有命令都通过此网络连接进行。

这里需要注意的是PTVS只接受来自localhost的连接,因此我们需要在PythonWrapper中打开一个新的端口,让远程python连接到此端口,再将此端口上收到的所有数据转发到PTVS打开的服务端口上,反之亦然。

在做好此项工作之后,我们将PTVS目录下的py文件复制到Linux主机下。

修改这些py文件中写死的本机IP127.0.0.1,将之修改为windows主机的IP,如:

    def connect(self, port):

        self.conn =socket.socket(socket.AF_INET, socket.SOCK_STREAM)

       self.conn.connect(('127.0.0.1', port))

 

        # start a new threadfor communicating w/ the remote process

       start_new_thread(self._repl_loop, ())

 

最后修改PythonWrapper,让它自动连接到远程Linux主机上调用python并执行此脚本。

经过修改之后,就可以使用vs2013下的远程交互窗口了!

vs2013下的python远程调试支持(1)_第6张图片


当然此时Linux下的python进程是没有任何控制台输出的。

 

接下来该试试远程工程调试了,待续~~~



你可能感兴趣的:(VELT开发)