如何在web应用中启用Eclipse调试功能?

3 投票
2 回答
1934 浏览
提问于 2025-04-17 04:08

我正在使用Django框架来开发我的Python网页应用,使用的是Eclipse IDE和PyDev插件。请问我该如何使用调试功能呢?

更新1 特别是使用http://pydev.org/updates这个插件。

更新2 我已经做了以下几件事:

.pydevproject

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?>

<pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Python25
</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.5
</pydev_property>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/pi-proto</path>
</pydev_pathproperty>
<pydev_pathproperty name="org.python.pydev.PROJECT_EXTERNAL_SOURCE_PATH">
<path>C:\Program Files\GeoDjango\Django-1.0.2-final</path>
<path>C:\eclipse-SDK-3.7-win32\plugins\org.python.pydev.debug_2.2.3.2011100616\pysrc
</path>
</pydev_pathproperty>
</pydev_project>

manage.py

#!/usr/bin/env python
from django.core.management import execute_manager
try:
    import settings # Assumed to be in the same directory.
except ImportError:
    import sys
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
    sys.exit(1)

if __name__ == "__main__":
    import sys
    if len(sys.argv) > 1:
        command = sys.argv[1]

    if settings.DEBUG and (command == "runserver" or command == "testserver"):

        # Make pydev debugger works for auto reload.
        try:
            import pydevd
        except ImportError:
            sys.stderr.write("Error: " +
                "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
            sys.exit(1)

        from django.utils import autoreload
        m = autoreload.main
        def main(main_func, args=None, kwargs=None):
            import os
            if os.environ.get("RUN_MAIN") == "true":
                def pydevdDecorator(func):
                    def wrap(*args, **kws):
                        pydevd.settrace(suspend=False)
                        return func(*args, **kws)
                    return wrap
                main_func = pydevdDecorator(main_func)

            return m(main_func, args, kwargs)

        autoreload.main = main

    execute_manager(settings)

运行配置 - 参数

runserver 0.0.0.0:8001

更新3 我正在按照这个链接的步骤进行操作 http://bear330.wordpress.com/2007/10/30/how-to-debug-django-web-application-with-autoreload/

但是没有成功。你能指导我如何正确地按照上面的链接进行操作吗?然后我会在这里更新结果。

更新4 我使用的是Python 2.5.2,GeoDjango 1.2.7,以及带有PyDev插件的Eclipse Indigo。

2 个回答

1

要配置PyDev与Django一起使用,可以查看这个链接:http://pydev.org/manual_adv_django.html

所以,如果你在没有自动重载功能的情况下运行(当你创建一个新的Django运行时,PyDev会自动处理这个),你可以直接进行所有操作(也就是说,调试和启动不需要任何特别的调整)。

现在,如果你在开发时想要开启自动重载,可以参考这个链接的提示:PyDev和Django:如何重启开发服务器?(这个是为了处理一个问题,即当主进程被杀掉时,Django会让子进程继续存活)。

另外,关于远程调试器的相关内容,可以查看这个链接:http://pydev.org/manual_adv_remote_debugger.html,了解如何在使用自动重载功能时将调试器连接到PyDev(主要是你需要先启动远程调试器,然后定期添加断点,只要在主会话之前调用pydevd.patch_django_autoreload(),PyDev就会在这些断点处停下来)。

撰写回答