【问题标题】:Remote debugging Python in Eclipse在 Eclipse 中远程调试 Python
【发布时间】:2018-01-06 23:28:41
【问题描述】:

我在本地 Windows 机器上安装了带有 Pydev 和 RSE 的 Eclipse。我想远程调试托管在 Ubuntu 16.04 VPS 上的 Python 应用程序(Odoo 9.0)。我在远程机器上安装了 Pydev。我已经能够使用密钥通过 SSH 连接到远程计算机进行身份验证,并且可以浏览远程文件系统。

请参阅此处的文档; http://www.pydev.org/manual_adv_remote_debugger.html 并读取位于文件中的 cmets; /usr/local/lib/python2.7/dist-packages/pydevd_file_utils.py 看来我需要将远程映射到本地文件系统。对我来说,这意味着代码必须同时存在于远程和本地(Eclipse)机器上。如果是这种情况,我如何使它们保持同步。我希望能够在远程机器上使用我的代码库进行开发。我需要将所有更改复制到本地计算机吗?感觉好像我遗漏了部分难题,而且我发现的文档不够详细,无法实施。

请让我知道实施远程调试还有哪些未完成的步骤以及对我的工作流程的任何影响(例如必须将所有更改复制到两个文件系统)。

【问题讨论】:

    标签: python eclipse pydev remote-debugging


    【解决方案1】:

    如果您想远程(而不是本地)开发代码,我的建议是使用 sshfs(因此,您可以直接在那里进行所有更改)。

    在这种情况下,您甚至应该能够为远程解释器创建一个 shell 脚本(即:解释器可以是任何脚本,因此,您可以对其进行 chroot 甚至通过 ssh 运行一些 python)。

    注意我还没有实际测试过这个,但理论上它应该可以工作;)

    【讨论】:

    • 恐怕这不能满足我的远程调试要求。我很高兴我总是可以修改服务器上的文件并执行它,但是在 Eclipse 中完成所有这些并进行我需要的调试是有好处的。
    • 好吧,如果你设置了通过 sshfs 远程编辑的东西,并将它本地挂载在你远程拥有的相同路径中,你不需要在 pydevd_file_utils.py 中做任何额外的映射(然后,当你运行你的程序时,你应该可以使用pydev.org/manual_adv_remote_debugger.html中所说的远程调试器——注意如果你只有一个ssh连接,你可能需要做一些端口转发)。
    • 您也可以查看:sites.google.com/site/programmersnotebook/…,其中有一些关于设置远程环境的分步说明。
    【解决方案2】:

    我找到了一种使用 eclipse 和 pydev 从我的 mac 到 Debian linux 服务器(bitnami 设置)进行远程编辑和远程调试的方法。

    要设置远程编辑和调试 - 请先阅读这些内容

    https://www.pydev.org/manual_adv_remote_debugger.html https://sites.google.com/site/programmersnotebook/remote-development-of-python-scripts-on-raspberry-pi-with-eclipse

    我的安装注意事项

    • 在服务器 python 环境中安装了 pydevd(不需要像上面说明的 raspy 示例中那样复制 pysrc)。有关安装步骤,请参见上面的链接。
    • 使用 RSE 创建了远程项目。 (Eclipse Remote Shell 扩展)使用 RSE“Remote shell”窗口,您可以右键单击源目录并创建一个指向服务器文件的本地 Eclipse 项目。有关安装步骤,请参见上面的链接。
    • 在服务器 pydevd 安装目录中编辑 pydevd_file_utils.py。对我来说这是/opt/python/lib/python3.7/site-packages。如果您不确定这是在您的服务器 python 环境中输入以下内容import pydevd; print(pydevd.__file__)。添加了PATHS_FROM_ECLIPSE_TO_PYTHON = [('/Users/<myusername>/dev/test/RemoteSystemsTempFiles/<server ref in RSE>/opt/bitnami/apps/odoo/data/addons/13.0/test/test.py','/opt/bitnami/apps/odoo/data/addons/13.0/test/test.py')]。阅读 cmets 并将其放在下方示例附近。
    • 可以添加以下内容而不是 PATHS_FROM_ECLIPSE_TO_PYTHON = [(r'/Users/andrewlemay/esp/test/RemoteSystemsTempFiles/34.253.144.28/',r'/')],这意味着它适用于服务器上的所有 RSE 项目。
    • 请注意,RemoteSystemTempFiles 目录是本地计算机上 Eclipse RSE 路径的一部分
    • 添加 SSH 远程端口转发隧道。这会将端口 5678 上的数据从服务器转发到客户端 localhost:5678,以允许服务器远程调试器将信息发送到侦听客户端调试器 - 请参见下面的命令。有了这个,我不需要在 settrace() 命令中使用 IP 地址,也不需要将路由器配置为端口转发到我的本地机器。
    • 这里有关于 SSH 隧道的信息 https://www.ssh.com/ssh/tunneling/example

    运行

    • 使用 5678 上的远程端口转发设置到服务器的安全 SSH 隧道
    • 通过控制台或 RSE Remote Shell (Eclipse>Windowother>Remote systems>Remote Shell
    • 在服务器上运行 python 脚本

    运行命令

    客户

    我正在使用私有共享密钥,并在本地终端中输入以下内容 ssh -t -i "/Users/<username>/keys/<serverkeyname>.pem" <serverusername>@<serverIP> -R 5678:localhost:5678 -C -N 该进程将阻塞终端。调试完成时使用 CTRL-C 结束进程以关闭隧道。如果您不需要私有共享密钥,您可能会丢失 -t -i "/Users/<username>/keys/<serverkeyname>.pem" 部分。

    通过单击PyDev:start the pydev server 按钮在 Eclipse 中启动 Pydev 服务器(必须处于调试视角)。 PyDev:start the pydev server

    然后您应该会在控制台中收到一条消息说Debug Server at port: 5678

    服务器

    您可以使用服务器终端或 Eclipse RSE 远程 Shell 窗口 Python3 test.py

    本地 Eclipse 调试服务器应该会生机勃勃!并允许调试和断点等。

    测试代码 - test.py

    import os
    import sys
    import pydevd
    pydevd.settrace() 
    
    i = 3
    p = 'Hello!' * i
    print(p)
    
    if __name__ == '__main__':
        pass
    print("Hello world 4")
    for k, v in os.environ.items():
        print(f'{k}={v}')
    

    希望这对某人有用...

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 2016-05-13
      • 1970-01-01
      • 2013-01-29
      • 2013-02-13
      • 2015-09-27
      • 1970-01-01
      • 2017-12-11
      • 2013-11-21
      相关资源
      最近更新 更多