如何 debug
问题
升级 node 后,解压操作出现了问题。
排查思路
首先是重现问题,确保问题存在。并明确复现路径。
明确问题存在后,一般会从改动排查起,但很遗憾,这次的改动为升级了 node 16, 无法明确知道node 版本升级有哪些改动。所以需要换条路。
对于大型项目中,且能够稳定复现的问题。首要的是构建最小 case, 方便以极小的成本尝试出错单元,同时避免被其他模块影响。做到精细化调试。
虽然有的时候会觉得有些麻烦,但这一步能确保解 bug 的步骤是合理的,而不是一直像无头苍蝇一样到处飞。 最好是在平时就加以练习,避免到了紧要关头,焦头烂额时,被环境不对,工具用的不顺手绑住手脚。
另外,如果发现是某一个库导致的问题,可以通过尝试锁定有问题版本的最小范围(这时你的 小 demo 就发挥作用了!)通过查看 changelog 的方式查看 diff, 但很有可能开发者没咋好好写 changelog, 所以也可以做一下 代码版本间的 diff。
一些遗留问题
本次遇到的棘手的 bug 是关于 升级 node 16 引入的: bad CRC 1c9bea0a (should be 00000000) https://github.com/archiverjs/node-archiver/issues/491
原因是一个底层库:DeflateCRC32Stream is broken with NodeJS 15.6.0 https://github.com/archiverjs/node-crc32-stream/issues/31
具体的关于这个问题在下一篇进行分析
一些其他启发
在排查的时候,经常做一些机械性的,重复的事情,如解压,拖拽,删除等。可以用 shell 命令去做,提高效率。