【解决方案 十一】问题排查方法的思考

简介: 【解决方案 十一】问题排查方法的思考

从2019年7月17日下午4点到晚上11点的痛苦追踪,再从2019年7月18日上午10点到下午4点的柳暗花明,终于解决了一个大坑一个神坑。感觉一定要记录下来解决历程和最终形成的思考,要不然白瞎这么痛苦的追踪了。

如何入坑

测试小姐姐在检查一个bug的时候一顿意外操作发现一个隐藏bug,生活总是充满了意外,华丽丽的指派给了我。简单说就是有个表单在保存的布局结构和再次编辑时的布局结构不同,而且复现起来很难。首先拿到这个bug我就头大,一顿操作要拖动40多个字段到布局里来,复现一次花费贼多时间。然后很慌,不管三七二十一,先抓请求,然后在请求的接口上打断点,一顿调试,追踪,结果一无所获。具体的业务内容还是得保密,只能大致说说自己先入为主的错误想法:由于数据访问频次较大,所以使用Redis来缓存数据,所以保存布局报错第一时间怀疑的就是缓存没有清空,一直在缓存这里兜圈子。本次的解决方式是:

保存的时候就有问题,每次保存的时候虽然全部拖动到左边,应该传入146个字段,但是每次保存的时候入库的有时候101,有时候95,调试编辑布局的时候获取字段数量与数据库内该次扩展一致,确认问题出在保存的时候,然后调试POST接口,发现前端在每次传入partsXml参数的时候都不一样,后端逻辑遵循前端的xml参数,所以问题出在前端给的partXml上,给的参数不对

这里说说自己犯的错误:

  • 先入为主错误思想:主观臆断,以为就是架构缓存的问题,没有考虑其他可能性,主要还是逃避排查问题的心理作祟。
  • 没有获取稳定复现:没有获取比较稳定的复现,就是看到的bug复现可能只是原因的其中一个表象,而非全部。
  • 没有反映真实情况:找大佬帮忙查问题的时候,说了太多自己主观看法,例如缓存清理问题,导致大佬思路被带到缓存检测这里,所以第一步反映的应该是客观的问题,然后再谈自己不确定的看法,并且明确自己的看法有几分把握
  • 没有理解整个流程:再没有理解整个流程的情况下,直接切到断点处排查问题,很容易跑偏。

以上体现的这几个错误点,都体现在阅读历史代码解决问题的过程不够规范,并且有一定的逃避和不愿意看的心理这其实是更深层次原因,有逃避问题的倾向,老觉的不是自己的问题,其实解决bug的过程不光是单纯解决问题,还对自己熟悉整个执行流程有很大的帮助,没有逃避的必要,再说这个问题总该归你解决。

思考总结

再次遇到类似问题的时候该怎么处理呢?我觉的正确的流程应该是这样的,就以这次的这个bug为例:应该遵循这样的流程:

观察问题,获取稳定复现:第一步就是要获取稳定复现,其实头一天晚上在复现的过程中没有彻底搞清楚状况,没有获取终极复现,稳定复现应该是这样:

  • 1 点击恢复的时候再次保存才会复现
  • 2 已经产生的租户级布局过的编辑布局不会再次复现

而最开始只是认为保存后没有保存布局这样一个简单看法,没有找到精准的复现场景。

理解流程:理解完整实现逻辑:第二步其实应该做的是对整个流程进行梳理,来判断哪一步有问题,而不是先入为主的盲目定位到缓存位置。

进入逻辑:断点调试逻辑:确认好流程后,最好跑一遍流程,熟悉一下实现过程,并理解代码实现过程。

推断和验证:推断验证所有可能性:这一步应该能推断出这样的可能性

  • 前端传入的参数验证,是否正确传参
  • 后端Controller层需要进行断点调试,逻辑是否有误
  • 缓存清理逻辑,服务器端和本地缓存是否清理成功

找到三种可能出错的地方并进行一一验证,才能分析出整个环节问题可能出现在哪儿。不应该直接就定位到缓存。事实证明,最后的问题就是因为历史数据缺乏校验导致的xss攻击,所以一开始前端参数就有问题。后边怎么查都没用。

找大佬协助:陈述客观事实并提出自己看法:这里要承认一波,根本没详细的分析问题就言之凿凿的自己主观看法给亮哥,导致一开始分析就朝着缓存走。问题大大的。正确做法应该是合理提出事实和自己的推断。

复盘和提炼:复盘就是俺这篇博客文章了,提炼就是:目前的站点存在前后端不分离造成的xss攻击现象,只能通过输入限制来进行避免,后期是否能改造下呢?历史未经校验的数据再进行的xss攻击该怎么解决呢?

当然核心就是不逃避问题按照流程去处理问题,你会发现,经过艰苦奋斗的debug比解决普通问题成就感大多了,至少我可以总结下实施站点的实现逻辑了!by the way ,找合适的人处理合适的事情,脸皮要厚!

相关文章
|
存储 数据采集 人工智能
如何设计一个监控平台(上篇)
在大型分布式微服务场景下,各个服务版本快速迭代,各类业务规模不断膨胀,同时监控的场景也在不断的发生变化,线上故障随时可能发生,各个平台错综复杂,如何保证线上服务稳定运行,同时提升运维效率,降低运维成本成了监控平台的挑战。
如何设计一个监控平台(上篇)
|
消息中间件 监控 算法
JVM技术之旅-线上分析排查问题
JVM技术之旅-线上分析排查问题
265 0
JVM技术之旅-线上分析排查问题
|
SQL 存储 关系型数据库
常见问题排查案例|学习笔记
快速学习常见问题排查案例
125 0
常见问题排查案例|学习笔记
|
小程序 程序员 测试技术
软件问题修复跟踪系统实战开发教程(上篇)
软件问题修复跟踪系统实战开发教程(上篇)
软件问题修复跟踪系统实战开发教程(上篇)
|
Java 测试技术 网络架构
技术分享 | 实战演练接口自动化如何处理 From 请求?
Form 请求代表请求过程中,请求体为表单类型。其特点为:数据量不大、数据层级不深的情况、使用键值对传递。Form 请求头中的content-type通常对应为application/x-www-form-urlencoded。碰到这种类型
技术分享 | 实战演练接口自动化如何处理 From 请求?
|
缓存 网络协议 前端开发
业务前端界面报错504排查思路和解决办法
业务前端界面报错504排查思路和解决办法
业务前端界面报错504排查思路和解决办法
|
数据采集 存储 消息中间件
谈谈大数据采集和常见问题
谈谈大数据采集和常见问题
386 0
|
存储 Web App开发 监控
浅谈前端异常监控平台实现方案
异常捕获是改善软件质量的跟踪手段之一,常见的方式是记录日志,从日志分析异常问题进而跟进。对于前端项目来说,异常可能是后端接口数据导致,可能是前端本身业务逻辑问题导致,不管是什么导致的异常,只要能够精准的捕获到就能够分析出问题所在。可能有小伙说有测试阶段,全面的测试机制的确能够降低异常的出现,但是测试大部份情况是在非生产环境上进行的,覆盖面有限。
446 0
浅谈前端异常监控平台实现方案
|
JSON 运维 前端开发
开发中遇到的问题&解决方案(十一)
前天不是开工嘛,然后刚刚到公司前端说测试环境好像挂了,开工就直接王炸了,找了运维,运维说服务器过年关机了回来发现有个配件坏了,暂时修不好。那我就本地部署一套当测试环境用,我同步了一份生产库到本地,然后问题就来了,之前好好的功能全部出现了问题,因为年前有需求改动,debug了好几遍代码也没有查出问题,然后突然想到MySQL版本不对。
120 0
开发中遇到的问题&解决方案(十一)
|
SQL 监控 网络协议
云架构系统如何做性能分析?| 实战干货
云架构系统如何做性能分析?| 实战干货