【问题标题】:Debugging python: how to find global-state changes? [closed]调试python:如何找到全局状态变化? [关闭]
【发布时间】:2020-01-27 09:13:27
【问题描述】:

有什么方法可以找到 python 会话中两个时期之间状态的总差异?

我想检测对任何全局变量的更改,包括任何任意嵌套的更改(例如对对象属性和容器元素的重新分配)。

这样做的原因是调试一个复杂的函数,该函数具有干扰另一个函数后续行为的意外副作用。 我想找出函数调用前后的变化。 (我希望看到更改的摘要。我不想手动跟踪所有级别的子例程,寻找不会超出范围并被修改且随后不会恢复到其原始状态的变量值。)我想我想要类似于内存堆的差异,但在更高的抽象级别。 (这在调试内存泄漏时也很有帮助。)标准库中是否已经有任何可以提供帮助的东西?

【问题讨论】:

  • 如果你需要这种调试,那么你的功能太复杂了。在陷入无休止的调试之前,您应该尝试重构。
  • @KlausD。我正在尝试调试其他人的功能,但还不知道什么重构是相关的。

标签: python debugging state


【解决方案1】:

您是否尝试过globals() 返回一个全局字典?

一旦你有了这个,这里有一些关于递归差异的讨论:Recursive diff of two python dictionaries (keys and values)

【讨论】:

  • 这为您提供了一个模块的全局变量。可以有很多很多。
  • @user2357112 如果您还想检查另一个模块的全局变量,请将该模块导入当前的全局命名空间。如果要检查所有模块,请导入 sys.对于模块和类实例,可能只需要递归到__dict__ 属性。
猜你喜欢
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 2018-09-26
  • 1970-01-01
  • 2013-12-30
  • 2016-10-28
相关资源
最近更新 更多