Debugging 当存在无限递归异常时,Pycharm无法在断点处停止
下面是我的源代码:Debugging 当存在无限递归异常时,Pycharm无法在断点处停止,debugging,recursion,pycharm,breakpoints,Debugging,Recursion,Pycharm,Breakpoints,下面是我的源代码: def infinite_recursion(i): return infinite_recursion(i) def index_out_of_range(): arr = [1, 2, 3] print arr[3] def foo(): try: infinite_recursion(1) except: pass print 1 def bar(): try:
def infinite_recursion(i):
return infinite_recursion(i)
def index_out_of_range():
arr = [1, 2, 3]
print arr[3]
def foo():
try:
infinite_recursion(1)
except:
pass
print 1
def bar():
try:
index_out_of_range()
except:
pass
print 2
if __name__ == '__main__':
foo()
当我尝试用Pycharm调试它时,我在函数“foo”中的行“print 1”处设置了一个断点。然后我在Pycharm中执行调试过程,最后,它没有在断点处停止,这很奇怪
然后,我更改源代码,并在函数“栏”中的“打印2”行设置断点,并从
if __name__ == '__main__':
foo()
到
这一次,Pycharm可以在断点处停止
有人能找出根本原因吗?在无限递归异常之后,Pycharm调试器似乎无法工作。哼哼,事实上,我在
Python 3
中再现了这一点:在正常模式下运行代码会在控制台中打印1
,在调试中运行它会导致致命Python错误:无法从堆栈溢出中恢复。
这可能与调试器在堆栈中添加额外调用有关,使其在达到最大递归深度之前溢出。无论如何,出于好奇,我希望我们同意您应该修复代码,而不是试图从中恢复。我的Python版本是2.7.10,当调试这些代码时,它不会像Python 3那样发出错误消息。它只是继续运行并将1
打印到控制台。你是对的,我应该修改我的代码以避免无限递归,但这段代码只是一个重现问题的示例。实际代码非常复杂,很难检测到无限递归。我希望Pycharm将来能解决这个问题。
if __name__ == '__main__':
bar()