3

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

4

2 回答 2

2

你把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实际调用函数。

于 2013-06-11T00:50:04.470 回答
2

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

PYTHONUNBUFFERED=true

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

于 2013-12-12T21:51:38.793 回答