9

如果我开发一个 Django 应用程序并使用包含的测试服务器,我可以import pdb; pdb.set_trace()在代码中的任何位置添加一个,并有一个断点让我进入交互式调试器。为了清楚起见,我并不是说使用任何 IDE,只是简单地设置 ssh-ing 到 VM 或远程开发服务器。

如何为 WSGI Django 应用程序获得类似的行为?(再次,假设的设置是我与服务器的 ssh 会话 - 虚拟机或远程)

4

2 回答 2

9

据我所知,如果您想将 pdb 与任意 wsgi 应用程序一起使用,最好的选择是使用rpdb2

(对于mod_wsgi使用 apache 的 Django,您可以参考本指南:http ://code.google.com/p/modwsgi/wiki/DebuggingTechniques )

于 2012-11-01T10:03:02.663 回答
0

问题是 WSGI 服务器将使用多个进程并分离或重定向标准流 - 输入、输出和动摇它呃。

对于 Apache httpd 和 mod_wsgi:

  • apachectl -X以, not apachectl start(norservice apache2 start等)开头
  • 不要使用WSGIDaemonProcess,WSGIProcessGroup等。
    您可能需要添加WSGIPythonHome,WSGIPythonPath等来替换守护程序属性。

同样,对于 gunicorn,您需要设置debug=Truedaemon=False.


mod_wsgi 指南建议使用类进行包装wsgi.application,在每个请求开始时调用 pdb,但任何其他陷阱都应该有效。

class Debugger:
    def __init__(self, object):
        self.__object = object

    def __call__(self, *args, **kwargs):
        import pdb, sys
        debugger = pdb.Pdb()
        debugger.use_rawinput = 0
        debugger.reset()
        sys.settrace(debugger.trace_dispatch)
        try:
            return self.__object(*args, **kwargs)
        finally:
            debugger.quitting = 1
           sys.settrace(None)

application = Debugger(application)
于 2018-05-16T12:02:56.680 回答