不清楚远程调试(Eclipse Pydev)使用的是哪个Python版本
以下这些指南对我在本地机器上设置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下运行呢?
3 个回答
如果你在使用代码,但不确定它是版本2还是版本3,你可以使用下面的代码来检查。
import sys
try:
print sys.version
except:
print(sys.version)
python -V
Python 2.7.5+
这里有两种方法可以查看当前的Python版本。
第一种:通过代码:
python -c 'import sys; print sys.version'
2.7.5+ (default, Feb 27 2014, 19:37:08)
[GCC 4.8.1]
第二种:通过直接命令:
第三种:通过主机名:
print socket.gethostname()
我找到了答案。
我需要测试一下这个远程调试的方法。
让我来解释一下我是怎么发现的:
我有一个本地系统,使用的是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也显示得很好。
结论:远程解释器用于运行/评估代码。
调试服务器可以帮助你添加