当前位置: 首页 > news >正文

如何正确定位前后端bug?

在平时的开发过程中,正确定位前后端bug是提高开发效率和项目质量的关键。以下是一些实用的方法。

一、前后端bug 特征

前端主要负责显示数据,后端主要负责处理数据、存储数据,前后端主要通过接口进行数据交换。

1.前端bug特征

  • 界面显示类问题:如文字大小不一,控件颜色不搭,控件不整齐,静态界面错误;
  • 页面布局类问题:文字排版没有统一,行间距大小、重叠、显示不全;
  • 页面交互类问题:没有点击,拖拽,基本都是JS的问题;
  • 兼容性问题:不同环境下的界面显示类问题和页面布局类问题;

2.后端bug特征

  • 业务逻辑类问题:如正确的用户名密码却登录失败等;
  • 数据类问题:数据新增成功但是没有显示;
  • 性能类问题,安全类问题;

二、判断前后端bug方法 

1.抓包+报文分析 

在复现bug时,F12或者Fiddler抓包,分析报文;

如果前端没有发出请求,则是前端bug;

如果前端发出了请求,但是参数不对,则是前端bug;

如果前端发出了请求,参数正确,后端没有相应,没有数据,则是后端bug;

如果前端发出了请求,参数正确,后端返回的数据不正确,则是后端bug;

如果前端发出了请求,参数正确,后端返回的数据也正确,但是界面显示不对,则是前端bug;

2.查看错误提示或日志 

前端错误提示:如果浏览器控制台(Console)有报错信息,如JavaScript错误、资源加载失败等,通常是前端的bug。

后端日志:查看后端服务的日志文件,如Linux服务器中的日志文件。如果日志中有error、warning、exception等报错信息,通常是后端的bug。

3.利用状态码判断

4xx状态码:表示客户端错误,通常是前端或客户端的问题。例如,404表示未找到资源,可能是前端请求的URL错误。

5xx状态码:表示服务器错误,通常是后端或服务器的问题。例如,500表示服务器内部错误。

常见状态码:

(1)以2开头

  • 200 – 请求成功,服务器也返回了响应信息

(2)以3开头:请求重定向了,请求的位置转移了

  • 301 – 永久性定向,请求的资源被分配了新的URL地址,而且以后请求的时候都是用新的URL地址
  • 302 – 临时性定向,请求的资源被分配了新的URL地址,这次访问是这个新的URL地址,下次访问可能就是另外的URL地址
  • 303 –临时性定向,请求的资源被分配了新的URL地址,请求的时候使用GET方法定向获取资源(与302的区别就是303要求客户端使用GET请求方式)

(3)以4开头

  • 401 – 表示访问的页面没有授权
  • 403 – 表示没有权限访问这个页面
  • 404 – 表示没有这个页面,服务器上无法找到请求的资源(也可以是服务器拒绝请求但是不想给拒绝原因),例如:前端未传标头Authorization,则后端状态码显示401表示该访问的页面未做授权

(4)以5开头

  • 500 – 表示服务器内部异常
  • 503 – 表示服务器正处于超负载或者正在进行停机维护,无法处理请求
  • 504 – 表示服务器请求超时,没有返回结果

 4.前端特定调试方法

(1)使用Vue Devtools等调试工具:对于使用Vue等前端框架的项目,可以利用Vue Devtools等浏览器扩展工具来查看和调试组件状态、属性和事件。

(2)控制台日志:在代码中添加console.log、console.error等日志语句,跟踪程序执行流程和变量状态变化。

(3)代码调试:通过浏览器的开发者工具设置断点,逐步执行代码,查看变量的值和调用栈,定位问题所在。

5.后端特定调试方法 

(1)查看数据库:检查数据库中的数据是否正确存储和更新。如果数据不正确,可能是后端处理逻辑的问题。

(2)查看缓存:如果项目使用了缓存机制,检查缓存是否正确更新和同步。缓存问题也可能导致后端bug。

http://www.lryc.cn/news/524375.html

相关文章:

  • mfc操作json示例
  • 【技术总结类】2024,一场关于海量数据治理以及合理建模的系列写作
  • Dockerfile另一种使用普通用户启动的方式
  • python的pushbullet库在设备之间发送通知链接文件
  • STM32之FreeRTOS开发介绍(十九)
  • 用java配合redis 在springboot上实现令牌桶算法
  • DCGAN - 深度卷积生成对抗网络:基于卷积神经网络的GAN
  • 51c~SLAM~合集1
  • 优化使用 Flask 构建视频转 GIF 工具
  • spring cloud如何实现负载均衡
  • leetcode19-删除链表的第n结点
  • 软件测试—— 接口测试(HTTP和HTTPS)
  • 3.1 Go函数调用过程
  • TDengine 做 Apache SuperSet 数据源
  • 08_游戏启动逻辑
  • Ardupilot开源无人机之Geek SDK进展2024-2025
  • 在K8S中,如果后端NFS存储的IP发送变化如何解决?
  • 模拟飞行入坑(五) P3D 多通道视角配置 viewgroup
  • 【springboot集成knife4j】
  • GPUStack使用
  • 如何选择一款助贷获客系统?
  • GDB相比IDE有什么优点
  • 介绍用于机器学习的 Fashion-MNIST 数据集
  • 【GitHub】登录时的2FA验证
  • CSDN年度回顾:技术征途上的坚实步伐
  • Kotlin Bytedeco OpenCV 图像图像57 图像ROI
  • 支持大功率输出高速频闪的图像处理用光源控制器
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和
  • Java-数据结构-二叉树习题(2)
  • 解锁面向对象编程:Python 类与对象详解