最近在将调试器添加到我的python 2.7.10代码时,我得到以下消息:
Traceback (most recent call last):
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/queues/connectors/amqplib_connector.py", line 191, in acking_callback
callback(message.body)
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/queues/consumable_message_queue.py", line 32, in deserialized_callback
self._callback_method(msg)
File "/Users/isaachess/Programming/vivint/Platform/BusinessLogic/businesslogic/util/statsd_util.py", line 95, in _time_func
retVal = f(*args, **kwargs)
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/net/router.py", line 226, in handle
try:
File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/net/router.py", line 226, in handle
try:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 49, in trace_dispatch
return self.dispatch_line(frame)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 68, in dispatch_line
if self.quitting: raise BdbQuit
BdbQuit
这是在插入行之后:
import pdb; pdb.set_trace()
在代码中.
我无法弄清楚为什么会这样.我已经阅读了Bdb和Bdbquit,但无法弄清楚为什么会在我的代码中发生这种情况.任何人都可以向我提供一些为什么会发生这种情况的提示吗?我真的想让调试器再次运行.
解决方法:
如果你从(pdb)提示继续并允许你的代码正常完成,我不希望输出像你指示的回溯,但如果你退出pdb,使用quit命令或^ D(EOF),像这样的回溯因为没有什么可以捕获调试器退出时引发的BdbQuit异常.在bdb.py中,self.quitting通过set_quit方法(以及各种运行方法中的finally子句)设置为True.当self.quitting为True时,trace_dispatch调用的调度方法会引发BdbQuit,而BdbQuit的典型except:子句是一个简单的pass语句; pdb从gdb继承了所有这些.
简而言之,当调试器交互提前完成时,异常处理用于禁用调试器使用的系统跟踪功能.
完全避免回溯的一种方法是以不同方式使用pdb.您可以在pdb中调用代码(而不是反之亦然),而不是从代码中调用pdb.set_trace()(而不是处理BdbQuit),此时将按照pdb的意图处理BdbQuit异常.这也允许您在不修改代码的情况下选择断点位置(使用pdb的break命令).或者你可以混合使用这两种方法;在pdb,pdb.set_trace()调用和所有调用下运行代码,这些调用将是只能通过修改代码才能删除的断点.
您可以使用pdb命令将脚本调用作为命令行参数,或使用python -m pdb,在pdb中调用代码.