在调试器中更改 Python 代码

2024-01-30

有没有允许在调试时更改Python代码的调试器?

换句话说:发生运行时异常,调试器停止,我以任何我喜欢的方式更改代码,并告诉程序继续。

我知道这种方法存在的问题,例如,如果我动态重新定义函数,对函数的引用仍然会指向旧定义,等等。我对此表示同意,因为我只想能够在非常简单的情况下进行小修复。

另一方面,我也对理论上是否有可能允许更改 Python 代码而不会遇到这些问题感兴趣:即以某种方式更新对已更改对象的所有引用等。我几乎可以肯定答案第二个问题是否定的,但如果我错了,我想知道。

编辑:如果我的目标(发生异常时交互地更改代码,然后继续执行)无需调试器即可实现 - 那也很好。我不需要使用调试器。


由于您可以随时按照您想要的方式更改常规类的内容,因此无需更新对对象的引用:您只需更新类的内容即可__dict__具有新方法和其他属性。

问题在于对函数的引用:您无法在不更改函数标识的情况下更新函数。您可以使用始终按名称查找实际函数的代理函数,并且可以随时更改实际函数。否则,您可以规划代码,使其不会长时间存储函数引用;一旦函数被更新,很快就会通过名称查找它,但是传递到某处的旧引用将继续执行更长的时间。

当您想要在不严重停机的情况下升级长期运行的系统时,这种修补是有意义的:您将其暂停片刻以一致地升级多个类和功能并取消暂停。 AFAIK Erlang 以类似的方式进行动态更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在调试器中更改 Python 代码 的相关文章

随机推荐