有没有办法修改pydevd_file_utils.PATHS_FROM_ECLIPSE_TO_PYTHON值而不必修改该文件?

时间:2011-11-03 17:47:02

标签: python eclipse pydev

我正在使用pydev插件来调试远程应用程序。

此(远程)应用程序的文件结构与运行Eclipse的结构不同。当我从Eclipse IDE设置断点时,这会导致问题,因为pydev调试器服务器无法将文件的绝对路径与远程应用程序上的文件匹配,因此断点未被命中。

我不想硬编码pydevd_file_utils.PATHS_FROM_ECLIPSE_TO_PYTHON常量来启用文件路径转换。

您是否知道在不更改文件的情况下修改此值的方法?

谢谢!

4 个答案:

答案 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。