debug小结

写代码的时候,遇到bug然后debug总是痛苦的,下面讲讲自己的一些点点心得和踩过的坑:

What

其实遇到bug的第一步是要知道这是什么bug,之前遇到一个bug说是
NameError: name ‘cv2’ is not defined,然后和这个bug:ModuleNotFoundError: No module named ‘cv2’搞混了
然后自己focus都在这个环境里面为什么没有opencv-python。
其实NameError: name ‘cv2’ is not defined,就是代码里面没有import cv2,知道了错,查了一下code就马上fix了。
所以,遇到bug,多花点时间看看error message是什么很重要,因为大方向要是搞错了只会南辕北辙。

Why

知道了bug的含义,然后耗时间的就是,是什么原因trigger了这个bug。虽然有时候,bug本身的含义,能直接让你去fix,如上面的例子,但是有些时候,问题复杂了,就没有那么容易直接看出来了。

有时候就需要你有一些猜想,合理的猜想可以有些一些角度:1. 代码的逻辑问题,2. 依赖包的版本问题,3. 环境问题(环境变量问题,driver问题,docker的一些flag的问题),4.自己忘记和code base sync了……
但是要注意,当你给出自己的一些猜想的时候,你不要去钻牛角尖,适当的时候要摒弃自己的这些猜想,因为有可能是错的。我自己常常就陷在会在自己一些开始的猜想里面,出不来。
所以,我感觉需要有一个自觉,需要想一想自己此刻的assumption是什么,有这个自觉很重要。

How

  1. 找到简单,易行的测试的办法::
    之前是de云上面的一个bug,非常复杂,总是基于很多guessing去trigger一次又一次job,每次跑一次都要很久,fail了之后,又要重新起机子,浪费了很多时间。后来意识到,可以在本地(或者在起一个一样type的机子和settings)mimic一个一样的环境,然后自己log in那个机子,去复现上面的操作,最后极大的加快了debug的过程了。

就是你要静下来想一想,有没有什么好的办法去debug,或者用gdb,或者说自己模拟一个环境之类的。我们的目的是要快速有效的解决问题,很快找到简单易行的方法很重要!

  1. 找同事,一起debug:
    找同事的目的也是为了可以和同事一起更快的解决问题
    找同事前:
    在自己知道what,why,google了一圈,然后试了一些方法后,还是没有解决,可以去找同事。因为你在自己做了一些前期工作后,可以更有效率的和他们交流。
    找谁:
    你需要找一个在这个问题上面比较有经验的人,bug所对应code blame的那个同事会是很好的合作对象,毕竟code是他们写的,他们可能遇到这样类似的问题过。
    合作:
    一起讨论一起交流一起解决,两个人合作解决问题,有思路的碰撞,可能就能更好的解决问题。

  2. 找其他可以替代的solution:
    有时候你可能需要直接刚这个问题,比如说要对应的源码,
    但是也许你可以用替代的方法,比如说我用cv2不行,我也行可以用pillow之类的。
    看问题的价值和紧急程度了。