1、问题描述

开发一个新的HTTP接口,往前端写一个CSV文件。

代码怎么看都没问题,换了好几种写法都不行,怎么看都觉得代码没问题。

在代码里打断点,远程调试,代码可以进来,而且没有报错,但是文件没有下载成功。

 

2、尝试的解决步骤

2.1 尝试换浏览器

之前用的是谷歌,改用火狐浏览器,发现一样的效果。

2.2 尝试换一种写法

尝试直接用PrintWriter写,用RepondsEntity等都不行。

2.3 查看日志

日志一切正常

2.4 换个电脑在新的项目中写demo代码

发现几乎一样的代码,新的电脑本地的代码中可以正常下载。

 

3、排查到的原因

最终发现由于测试环境需要使用请求头插件加入一个特殊的参数才可以转到自己分支的机器上。

发起HTTP请求初期是通过请求头插件添加了一个请求头,导致代码可以正常调用特定的分支。

记一个诡异问题的分析步骤_下载工具

然后谷歌浏览器自动启动下载工具,这时插件设置的请求头没有带上,导致404。

然后换用火狐浏览器的时候,没有安装这个插件,然后再火狐上调试的时候发现代码没进来,突然想到会不会是火狐没有下载请求头插件设置请求头?

安装后设置,由于火狐浏览器没有自动关联某个下载工具,直接浏览器下载,发现下载成功。

4、诡异问题的排查步骤总结

4.1 review代码

review代码避免一些粗心等导致一些不必要的错误。

4.2 远程debug

远程debug有助于看代码是否被调用,参数,返回值以及中间过程是否有问题。

4.3 看日志

看日志有没有报错,方法有没有调到,返回值对不对。

4.4 控制变量法

比如同样的代码在不同电脑上看效果;

比如小范围改代码看看效果;

比如如果以前的代码正确,则查看修改了啥,逐步删除对比等。

4.5 搜索引擎大法

看看这种情况该怎么写;

这种错误一般什么原因等等。

4.6 寻求帮助

有可能其他人有类似的问题,如果很幸运其他人知道,给你一个正确的方向,则可能节省很多时间。

 

最终的一个整体的经验是,要先分析,而不是急于修改!!!