不清楚远程调试使用哪个 Python 版本(Eclipse Pydev)

Posted

技术标签:

【中文标题】不清楚远程调试使用哪个 Python 版本(Eclipse Pydev)【英文标题】:Unclear which Python version is used with Remote Debugging (Eclipse Pydev) 【发布时间】:2014-10-05 13:43:01 【问题描述】:

以下指南在设置 Eclipse Pydev(在我的本地机器上)和远程调试(在虚拟机上)方面帮助了我很多:

http://pydev.org/manual_adv_remote_debugger.html

http://brianfisher.name/content/remote-debugging-python-eclipse-and-pydev

如果我理解正确,我正在调试的应用程序必须在远程主机上启动。因此,应用程序使用远程 Python 版本。

现在,在 pydevd.settrace() 之后,Eclipse(本地主机)告诉我它在堆栈跟踪中使用本地 python 文件。 这是因为 pydevd_file_utils.py (PATHS_FROM_ECLIPSE_TO_PYTHON) 中的路径映射吗? 因为有些文件在这些映射之外(例如线程)。

想象以下情况:我正在生产(虚拟)机器(Python 2.4)上调试我的应用程序,但我的 Eclipse 托管在更新的开发机器上(默认为 Python 2.7)。应用程序会在远程 2.4 python 下运行吗?还是本地2.7 python下?

【问题讨论】:

【参考方案1】:

这里有两种确定当前 Python 版本的方法。

通过代码:

python -c 'import sys; print sys.version'

2.7.5+ (default, Feb 27 2014, 19:37:08) 
[GCC 4.8.1]

通过

直接命令:

python -V

Python 2.7.5+

还有

主机名:

print socket.gethostname()

【讨论】:

谢谢,但调试器将在哪个 Python 版本下运行代码?那是host-python还是guest-python版本? 我不知道。我已经添加了如何获取主机名 - 添加它并查看它为您提供的内容,本地机器名称或远程。【参考方案2】:

如果您使用的是代码,但不确定是 v2 还是 v3,您可以使用

import sys
try:
    print sys.version
except:
    print(sys.version)

【讨论】:

谢谢,但调试器将在哪个 Python 版本下运行代码?那是host-python还是guest-python版本?【参考方案3】:

我找到了答案。 我需要测试这种远程调试器方法。

让我解释一下我是如何发现的:

我有一个使用 python 2.6.5 的本地系统。 我使用 python 2.7.3 创建了一个新的远程系统(在本例中为虚拟机)。 然后我分享了以下脚本:

import pydevd
print 'hello world'

# call debugger server to handle this breakpoint
pydevd.settrace('10.31.94.156', stdoutToServer=True, stderrToServer=True)

# fron now on the host (debugger server) has control over breakpoints,
# variables, stepping through code etc.
print 'hi again'
import sys
print sys.version  # 2.7.3 (default, Sep 26 2013, 20:08:41)
                   # [GCC 4.6.3]

# now use a 2.7 feature: 
x = i : chr(65+i) for i in range(4)  # dict comprehension
print x  # 0: 'A', 1: 'B', 2: 'C', 3: 'D'

import socket
print socket.gethostname()  # my virtual machine name

print 'done'

当然,我在主机上的 Eclipse 中添加了一些断点。有趣的是,本地解释器给出了关于列表理解的错误,而它确实实际运行。它还在调试器的变量窗格中很好地显示了变量 x。

结论:远程解释器用于运行/评估代码。 调试器服务器帮你做广告

【讨论】:

以上是关于不清楚远程调试使用哪个 Python 版本(Eclipse Pydev)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Docker-Compose 时,使用 JPDA 进行远程调试不会通过 Eclipse 连接到 Tomcat

PHPSTORM2020.1+Xdebug2.9.8远程调试

GDB 在远程调试期间挂起,库版本不匹配

远程调试 - 远程调试器不支持此版本的 Windows 错误

Visual Studio中的远程调试:远程调试器不支持这个版本的windows

Eclipse 调试器和远程调试器不工作