python - 如何使用 pydev 在 eclipse 中添加断点?

标签 python eclipse debugging cygwin pydev

我想在 pydev 项目中添加一个断点。我将 eclipse 与 pydev 插件一起使用。我正在运行 Windows 7。我要调试的文件位于 C:\cygwin\workspace\project\main.py 。

当我尝试通过双击我想要断点的行的左侧来添加断点时,断点似乎在文件中可见,但是当我单击调试时出现此错误:

pydev debugger: warning: trying to add breakpoint to file that does not exist: /workspace/project/C:\cygwin\workspace\project\main.py

请注意,该文件在调试和正常运行模式下仍然运行良好。我还可以通过运行 python main.py 在 ide 之外运行该文件。

最佳答案

我实际上能够让它工作。我意识到我正在使用 PyCharm,但解决方案应该很容易适应,因为它们都使用 PyDev。基本问题是 IDE 需要 windows 路径,而 PyDev 需要 cygwin 路径。我在 PyDev 中找到了进行这些转换的合适位置。

这是我的设置

  • 将您的项目配置为对 cygwin 二进制文件使用 python(这可能不是必需的)
  • 编辑 Program Files/JetBrains/PyCharm 2.5/helpers/pydev/pydevd.py。这会将发送到调试器的路径转换为 ​​cygwin 路径。在第597行附近,也就是file = NormFileToServer(file)所在的地方,做如下改动

                orig_file = file
                file = NormFileToServer(file)
    
                if not os.path.exists(file):
    
                    file = orig_file.replace('c:/cygwin','')
                    file = file.replace('\\','/')
                    file = file.replace(' ','\ ')
                    file = NormFileToServer(file)
    
                    if not os.path.exists(file):
                        sys.stderr.write('pydev debugger: warning: trying to add breakpoint'\
                            ' to file that does not exist: %s (will have no effect)\n' % (file,))
                        sys.stderr.flush()
    

    稍后在 elif cmd_id == CMD_REMOVE_BREAK 语句下执行相同的文件名转换几行

  • 编辑 Program Files/JetBrains/PyCharm 2.5/helpers/pydev/pydevd_comm.py。这会将发送回 pycharm 的路径转换为 ​​windows 路径。在第 549 行附近将代码更改为如下所示:

                myFile = pydevd_file_utils.NormFileToClient(curFrame.f_code.co_filename)
                myFile = "C:\cygwin" + myFile
                myFile = myFile.replace('/','\\')
    

根据需要调整路径。帮助我解决这个问题的最重要的事情是在 PyCharm 运行/调试配置的环境变量中添加 PYCHARM_DEBUG=True

希望这可以为其他人节省我花 6 个小时来解决这个问题!

关于python - 如何使用 pydev 在 eclipse 中添加断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855319/

相关文章:

python - 从 Python 文本文件中的字段中提取数据

java - 如何在不同的PC上运行jar文件(具有selenium自动化、webdriver)

c++ - 使用 Boost 避免用户在 C++ 项目中访问文本资源

debugging - 如何调试magento应用程序

python - DRF-通过模型在 M2M 中创建新实例时出错

Python str.translate VS str.替换

python - 连续小波变换与 Scipy.signal (Python) : what is parameter “widths” in cwt() function? (time-frequency)

Java "constant string too long"编译错误。仅在使用 Ant 时发生,在使用 Eclipse 时不会发生

ruby - 非常基本的 ruby​​/sinatra/heroku/调试问题 : how to see output of puts and p?

javascript - 如何在 Chrome 中使用 Node 8 检查器?