[经验]为什么一个BUG调了这么久?

1.仅从表面现象判断出错的地方。 一个报文从A发到B收不到,从B发给B自己却能收到,这让我以为问题在操作系统或者TCP/IP协议方面。这样判断太草率,因为运行的环境不同,可能导致程序中不同语句的执行时序也不同。我的同事QQ曾提出一个通用的排错公式:

     

    已知:环境A + 程序A = 出错

    若

      环境B  + 程序A = 正常

    Then

          环境A存在问题

    若

       环境A  + 程序B = 正常

    Then

          程序A存在问题

    道理虽然简单,但在实际运行中我们往往只是无意识地运用这个公式,而不是有意识地。无意识=启发式 + 迅速, 有意识 = 穷举 + 完备

2. 日志比较重要。对于非致命的错误,界面的输出往往只是粗略的出错原因,日志才能告诉你更多的细节,如异常发生所在的类,所在的方法等等,必要的情况下,要将日志输出的级别设为最低,否则就查不到足够的信息。

3. 日志所记录的异常可能仍不是最原始的异常,这时候就要单步调试了。将断点设在日志所记录的出错处,然后一步一步地查找出错原因

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.