Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用pdb调试烧瓶_Python_Debugging_Flask_Pdb - Fatal编程技术网

Python 用pdb调试烧瓶

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

我正在尝试使用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
    ...
    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...'