【问题标题】:Set break points in Tornado app在 Tornado 应用程序中设置断点
【发布时间】:2013-06-10 18:46:36
【问题描述】:

如何在我的 tornado 应用程序中设置断点?
我尝试了 pdb,但 Tornado 应用程序接缝忽略了我的应用程序中的 pdb.set_trace() 命令。

【问题讨论】:

    标签: debugging python-2.7 tornado


    【解决方案1】:

    你把pdb.set_trace()...放在哪里了?这对我有用:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import tornado.httpserver
    import tornado.ioloop
    import tornado.options
    import tornado.web
    import pdb 
    
    from tornado.options import define, options
    define("port", default=8000, help="run on the given port", type=int)
    
    class IndexHandler(tornado.web.RequestHandler):
        def get(self):
            greeting = self.get_argument('greeting', 'Hello')
            reself.write(greeting + ', friendly user!')
    
    if __name__ == "__main__":
        tornado.options.parse_command_line()
        app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
        http_server = tornado.httpserver.HTTPServer(app)
        http_server.listen(options.port)
        pdb.set_trace()
        tornado.ioloop.IOLoop.instance().start()
    

    会话:

    $ python test.py
    > /home/mariusz/Dokumenty/Projekty/Testy/test.py(24)<module>()
    -> tornado.ioloop.IOLoop.instance().start()
    (Pdb) break 16
    Breakpoint 1 at /home/mariusz/Dokumenty/Projekty/Testy/test.py:16
    (Pdb) continue
    > /home/mariusz/Dokumenty/Projekty/Testy/test.py(16)get()
    -> self.write(greeting + ', friendly user!')
    (Pdb) step
    --Call--
    > /usr/local/lib/python2.7/dist-packages/tornado/web.py(497)write()
    -> def write(self, chunk):
    (Pdb) step
    > /usr/local/lib/python2.7/dist-packages/tornado/web.py(512)write()
    -> if self._finished:
    (Pdb) step
    > /usr/local/lib/python2.7/dist-packages/tornado/web.py(516)write()
    -> if isinstance(chunk, dict):
    (Pdb) 
    

    continue 放入上述代码后,调试器停止,因为我必须在浏览器中轮询http://localhost:8000/ 才能实际调用RequestHandler 函数。

    【讨论】:

    • 我实际上是在使用 Foreman 来运行我的 Tornado 应用程序。我猜它的工头忽略了断点。
    【解决方案2】:

    如果您使用工头运行您的应用程序,您可以在根项目文件夹的 .env 文件中设置环境变量。 在我的 .env 文件中设置下面的 env 变量对我来说很重要。

    PYTHONUNBUFFERED=true

    现在我可以在我的应用程序中设置代码断点,并在使用工头运行应用程序时将输出打印到服务器日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多