在失败的函数中重启调试程序。
项目描述
hot_restart
在失败的函数中重启调试程序。
安装
pip install hot_restart
hot_restart
目前没有除标准库之外的其他依赖项。如果已经导入了 pydevd
,hot_restart
将使用它来允许在 VS Code(以及其他使用 pydevd
/ debugpy
的 IDE)中进行调试。
使用
将您期望崩溃的任何函数包裹在 @hot_restart.wrap
中
import hot_restart
@hot_restart.wrap
def my_func():
...
@hot_restart.wrap_class
class MyClass:
def forward(self, x):
super().forward(x * 2)
或者,在定义函数和类之后,调用 hot_restart.wrap_module()
。
当包裹的函数崩溃时,hot_restart 将在包裹的函数中打开一个事后调试器,其余的堆栈仍然在函数调用之上保持活跃。
然后您可以修改崩溃函数的源代码,并从调试器中继续(c)ontinue,hot_restart 将重新加载该函数的源代码(仅该函数)。
hot_restart
使用AST变换来查找新定义,以避免造成“import-time”副作用,并在保持函数的每个版本(除初始加载外)在其自己的源文件中的同时,将行号与真实源代码匹配。
边缘情况
您还可以使用 hot_restart.reload_module()
触发完整的模块重新加载。这可能触发“import-time”副作用和重复(即冲突)的类定义。为了避免在重新加载主模块时重新启动主函数,请检查 hot_restart.is_restarting_module()
。
hot_restart
使用源重写来处理常见情况,并不修改函数的字节码。这限制了 hot_restart
在处理向闭包添加新变量或在现有类实例中添加方法时,但简化了实现。
super()
调用
hot_restart 将重新加载源中的 super()
重新写入为 super(type(self, self)
。这防止了方法获取闭包变量 __class__
,这在许多情况下会中断,但如果 super()
所在的位置没有定义 self
,则此重写可能会失败。此限制可能在将来被取消。
为了解决这个问题,您可以使用 super()
的两参数形式手动。
闭包和嵌套函数
hot_restart
会将旧闭包变量修补到新定义的函数中,前提是hot_restart.wrap
是最内层的装饰器。然而,函数不能在没有完全重新加载模块的情况下添加新的闭包变量。函数仍然可以获取新的参数。
对于嵌套函数,hot_restart.wrap_module()
无法找到内部函数,因此必须手动使用hot_restart.wrap()
。
如果hot_restart.wrap
不是最内层的装饰器,那么闭包变量将会丢失。
替代/补充工具
如果您只想实现更完整的即时重载(例如,为现有类的实例添加新方法的能力),您应该考虑使用jurigged。您也应该能够与hot_restart
一起使用jurigged
。如果您想使用jurigged
的代码重载与hot_restart
的功能重启结合,您可以通过设置来禁用hot_restart
的自动代码重载:
hot_restart.RELOAD_ON_CONTINUE = False
本模块实现了一个类似于“编辑并继续”的工作流程。如果您正在寻找具有IDE集成的更全面的工作流程实现,您可能对Reloadium感兴趣。
尽管存在这些有用的替代方案,但我创建了hot_restart
,因为我发现很难调试那些系统中的故障。hot_restart
有意实现了一组更简洁的重载例程,我可以轻松理解。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
hot_restart-0.2.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e71121602647ff6d86ada8824f6c9883320677995d1b5a3d9e94510faf2eb22c |
|
MD5 | 95780380527ffc564d4afd5f0fe818f1 |
|
BLAKE2b-256 | 3e3114a3723b4a1913f31a5bd9b63ae859badba36efcc9f1aa7af6ddb29513c1 |
hot_restart-0.2.1-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e7d365113a45acc7a7d8981ab2e8de47114f50fe37af41f4b9ab4482f5d22d00 |
|
MD5 | 650c3ed0110ae92381e9bd9f956c4b03 |
|
BLAKE2b-256 | 56ed9db6e1907a3cab869e0da6038e880c9600acb48b49a68381be6a25d0859d |