我发现之前之所以跑程序很慢 经常出错 同时我又没什么办法,
是因为 自己没有深入debug,如果每次出现 类型不匹配之类的时候 我是debug模式的话,我可能可以快速的识别这个部分是不是我所需要的, 如果不需要就直接跳过这个错误(比如把这一行注释掉)。
要经常debug, 很多时候程序出现的看起来是环境问题的问题,也可以考虑通过debug改善这些问题啊!!!
总结:
跑程序 跑项目的时候, 不管之前有没有跑通, 但凡出现一个Bug,首先在justmycode模式下,定位到具体是哪一行代码出了问题,然后:
- 确定该行是否是自己程序必须要的
- 可以不需要 那就注释掉,不过后面的代码行 可能以这一行代码为前置条件(这种情况可能考虑后续的代码也一并处理了)
- 如果需要的话, 判断错误来自哪里,然后从源头解决问题(可能要深入到包的底层代码,即设置justmycode=false)
首先从代码本身对问题的作用来判断是否出错
然后从代码本身语法逻辑上判断是否出错
然后从代码需要的包以及相关的包是否存在版本不匹配的角度来分析
尽量不要手动修改调用的包的底层的class功能, class太多,而且是包与包之前效果调用,一改经常是大改。
我的学长跟我说 他经常需要修改比如torch.lightning里面的某些类,但是不主张我这样做。 主张让我借助搜索引擎解决bug,或者尝试docker(这个很多时候不必用到)
-
尽可能使用原来作者指定的 包的版本,贸然换包的版本 会引起很多问题,比如新换的包 没有原来的包里面的某个功能 但是程序需要用这个功能,那这种情况就比较难解决啊。
每次一次性 换了很多包的版本之后,虽然我换的包版本互相兼容 但是还是经常出现各种Bug -
第一次运行的时候,跑通是第一目标,怎么跑得通怎么来。比如把不必要的功能先注释掉,把出错的命令先注释掉等等
-
vpdb, ipdb很好用