我正在使用pydev插件来调试远程应用程序。
此(远程)应用程序的文件结构与运行Eclipse的结构不同。当我从Eclipse IDE设置断点时,这会导致问题,因为pydev调试器服务器无法将文件的绝对路径与远程应用程序上的文件匹配,因此断点未被命中。
我不想硬编码pydevd_file_utils.PATHS_FROM_ECLIPSE_TO_PYTHON常量来启用文件路径转换。
您是否知道在不更改文件的情况下修改此值的方法?
谢谢!
答案 0 :(得分:4)
实际上,自2016年1月12日起,您可以在Fabio Zadrozny merged this PR之后执行此操作。
import pydevd
from pydevd_file_utils import setup_client_server_paths
MY_PATHS_FROM_ECLIPSE_TO_PYTHON = [
('/home/user/local-project', '/remote/path/to/project'),
]
setup_client_server_paths(MY_PATHS_FROM_ECLIPSE_TO_PYTHON)
pydevd.settrace()
此外,您可以在Eclipse中设置这些路径全局映射(从PyDev 5.5开始工作),打开菜单Window > Preferences
选择PyDev > Debug > Source Locator
。
答案 1 :(得分:3)
您可以通过设置如下的新环境变量来实现:
PATHS_FROM_ECLIPSE_TO_PYTHON='[["client_src_fullpath", "remote_src_fullpath"]]'
在linux中,只需在从命令行启动程序之前运行该程序,或将set设置为全局变量。
在Windows中,您需要将其设置为全局系统变量。
变量名称:PATHS_FROM_ECLIPSE_TO_PYTHON
变量值:[[“client_src_path”,“remote_src_path”]]
作为替代方案,您也可以在代码中执行此操作,但是您需要在导入pydevd之前执行此操作:
import os
os.environ.setdefault("PATHS_FROM_ECLIPSE_TO_PYTHON",'[["client_src_path","remote_src_path"]]')
import pydevd
pydevd.settrace("10.0.2.2", port=5678,stdoutToServer=True, stderrToServer=True, suspend=False,patch_multiprocessing=True)
(我知道这是一个非常古老的问题,但没有一个答案更新到当前代码)
答案 2 :(得分:0)
目前可以指定路径转换的唯一方法是编辑该文件(即:当前没有用户界面的UI)。
答案 3 :(得分:0)
不幸的是,没有好方法可以做到这一点。 作为一种解决方法,我通过在源文件的开头添加以下代码显式替换了函数NormFileToServer。
def SrcPathMapping(file):
eclipse_src_path = 'C:\\tmp\\workspace\\test\\Scripts\\'
server_src_path = '/home/tester/test/Scripts/'
return file.replace(eclipse_src_path, server_src_path)
import pysrc.pydevd as pydevd
pydevd.NormFileToServer = SrcPathMapping
当所有源文件都位于一个目录中时,这种简单的映射就足够了。为了正确实现映射函数,请检查pydevd_file_utils中的NormFileToServer。