我正在尝试使用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
可能有什么问题?
您可以在要执行中断的行执行此操作:
import pdb; pdb.set_trace()
只需确保在提交之前删除它:)。
我正在尝试使用pdb来调试flask应用程序。设置断点很容易;我只是在调用index()时使用b index来断开,或者在第44行设置b 44来断点。
是的,没关系。
断点适用于b 44,它是main的开头,但b索引不起作用。在命令行中,打印“Index is called”以指示调用该方法,但它不会在pdb中停止。
这里的“问题”是你告诉调试器在函数main()
的开头打破,但这不是你认为的函数,你会看到,真正发生的是装饰器正在取代你的main()
函数与一些其他函数(flask的路由处理程序),所以当你执行b index
时,你告诉调试器停止在main指向的函数的第一行,这是在flask的代码中。
尝试在此示例中设置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()
您可以定义一个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...'
您当然应该根据需要添加适当的安全保护,例如在生产中禁用,添加身份验证等