使用Visual Studio IDE中的c#,我可以随时暂停一个程序并观察其变量,检查我想要的任何内容。我注意到,当Komodo IDE发生崩溃并停止程序流程时,我可以做同样的事情。但由于某种原因,似乎当我手动暂停程序时尝试执行相同操作时,同样无法实现。我做错了什么或者说不可能?在后一种情况下,有人可以解释为什么吗?是IDE相关还是Python相关?
由于
编辑:其他问题,我该如何继续该程序?从我所看到的,在我调用code.interact(local = locals())之后,它的行为就像程序仍在运行所以我不能单击“运行”按钮,只能在“暂停”或“关闭”。
答案 0 :(得分:3)
如果你把
import code
code.interact(local=locals())
在你的程序中,然后你将被转储到python解释器。 (见Method to peek at a Python program running right now)
这与暂停Komodo有点不同,但也许你可以用它来达到同样的目标。
按Ctrl-d退出python解释器并允许程序恢复。
您可以使用traceback模块检查调用堆栈:
import traceback
traceback.extract_stack()
例如,这是一个打印调用堆栈的装饰器:
def print_trace(func):
'''This decorator prints the call stack
'''
def wrapper(*args,**kwargs):
stacks=traceback.extract_stack()
print('\n'.join(
[' '*i+'%s %s:%s'%(text,line_number,filename)
for i,(filename,line_number,function_name,text) in enumerate(stacks)]))
res = func(*args,**kwargs)
return res
return wrapper
像这样使用:
@print_trace
def f():
pass