Python 用pdb调试烧瓶
我正在尝试使用pdb调试flask应用程序。 设置断点容易;我只是使用Python 用pdb调试烧瓶,python,debugging,flask,pdb,Python,Debugging,Flask,Pdb,我正在尝试使用pdb调试flask应用程序。 设置断点容易;我只是使用b index在调用index()时中断,或者使用b 44在第44行设置中断点 断点与主索引的开头b44一起工作,但bindex不工作。 在命令行中,打印“Index is called”以指示调用了该方法,但它不会在pdb中停止 @app.route('/', methods=['GET', 'POST']) def index(): print "Index is called" name = None
b index
在调用index()时中断,或者使用b 44
在第44行设置中断点
断点与主索引的开头b44
一起工作,但bindex
不工作。
在命令行中,打印“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来中断,或者使用b 44在第44行设置中断点
是的,很好
断点与b 44一起工作,b 44是main的开始,但b索引不工作。在命令行中,打印“Index is called”以指示调用了该方法,但它不会在pdb中停止
这里的“问题”是,您告诉调试器在名为main()
的函数开始时中断,但这并不是您认为的函数,您会看到,真正发生的事情是装饰程序正在用其他函数(flask的路由处理程序)替换main()
函数因此,当您执行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
中(例如:
当然,您应该根据需要添加适当的安全保护,例如在生产中禁用、添加身份验证等
@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...'