我正在尝试使用pdb来调试flask应用程序。
设置断点很容易;我只是在调用index()时使用b index
来中断,或者在第44行使用b 44
来设置断点。
断点适用于b 44
这是主要的开头,但b index
不起作用。
在命令行中,打印“Index is called”以指示调用该方法,但它不会在pdb中停止。
@app.route('/', methods=['GET', 'POST'])
def index():
print "Index is called"
name = None
...
return render_template('index.html', form=form, name=name)
if __name__ == '__main__':
manager.run() # line 44
可能有什么问题?
答案 0 :(得分:19)
您可以在要执行中断的行执行此操作:
import pdb; pdb.set_trace()
请确保在提交前删除它:)。
答案 1 :(得分:2)
我试图使用pdb调试烧瓶应用程序。设置断点很容易;我只是在调用index()时使用b index来断开,或者在第44行使用b 44来设置断点。
是的,没关系。
断点适用于b 44,它是main的开头,但是b索引不起作用。在命令行中,"索引被调用"打印以指示该方法被调用,但它不会在pdb中停止。
"问题"这是你告诉调试器在名为main()
的函数的开头打破,但这不是你认为的函数,你会看到,真正发生的是装饰器正在用一些其他函数(烧瓶的路由处理程序)替换你的main()
函数,所以当你执行b index
时,你告诉调试器停在main指向的函数的第一行,这是烧瓶的代码。
在此示例中尝试设置b index1
:
def deco(fn):
def _wrapper():
print "Deco called"
return fn()
return _wrapper
@deco
def index1():
print "Index is called"
return "hi stranger!"
salva = index1
if __name__ == '__main__':
import pdb; pdb.set_trace()
index1()
答案 2 :(得分:0)
您可以定义一个http
端点,当您在浏览器中将其插入pdb
时(例如,在http://127.0.0.1:5000/pdb处>
@app.route('/pdb')
def pdb():
"""Enter python debugger in terminal"""
import sys
print("\n'/pdb' endpoint hit. Dropping you into python debugger. globals:")
print("%s\n" % dir(sys.modules[__name__]))
import pdb; pdb.set_trace()
return 'After PDB debugging session, now execution continues...'
您当然应该根据需要添加适当的安全保护,例如禁止生产,添加身份验证等。