我知道如何使用口译员pdb
and IPython
,但这需要我事先确切地知道我想在哪里停止。然而,我经常运行需要几分钟到几小时的数字处理脚本,我想确切地知道它的进展情况。一种解决方案是简单地在各处放置大量日志记录语句,但随后我要么被太多信息淹没,要么无法准确记录我想知道的内容。
有没有一种方法可以初始化侦听器循环,在某些组合键下,该侦听器循环会将我放入当前所在的代码中?想想 CTRL+Z 但让我使用 Python 而不是 Bash。
您可以使用信号模块 http://docs.python.org/library/signal.html设置一个处理程序,当您按下 control-C 或 control-Z 或其他任何命令时,该处理程序将启动调试器。SIGINTR、SIGSUSP。
例如定义一个模块instant_debug.py
覆盖 SIGQUIT,
import signal
import pdb
def handler(signum, frame):
pdb.set_trace()
signal.signal(signal.SIGQUIT, handler)
然后制作一个脚本
import instant_debug
import time
for i in xrange(1000000):
print i
time.sleep(0.1)
在执行过程中的任何时候,您都可以通过键入跳转到代码CTRL+\
,检查堆栈u
and d
和正常情况一样pdb
,然后继续c
就好像什么都没发生过一样。请注意,您只会在下一个“原子”操作结束时跳入——这意味着不会在巨大的 C 模块中间停止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)