热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

拿到一个新bug怎样分析

1.拿到一个新bug,首先要重现问题.这对code问题是必须的,对客户的data问题,几乎也是必须的.如果是code问题,不重现就没办法修改代码,改好了也无法验证是不是改对了.客户的data出问题,多数情况也是能够重现的.毕竟客户是用我们的系统操作的

1. 拿到一个新 bug, 首先要重现问题. 这对 code 问题是必须的, 对客户的 data 问题, 几乎也是必须的. 如果是 code 问题, 不重现就没办法修改代码, 改好了也无法验证是不是改对了. 客户的 data 出问题, 多数情况也是能够重现的. 毕竟客户是用我们的系统操作的

1. 拿到一个新 bug, 首先要重现问题. 这对 code 问题是必须的, 对客户的 data 问题, 几乎也是必须的. 如果是 code 问题, 不重现就没办法修改代码, 改好了也无法验证是不是改对了. 客户的 data 出问题, 多数情况也是能够重现的. 毕竟客户是用我们的系统操作的, 只要拿到客户的历史数据, 对照着是可以自己做出同样的数据. 以前我遇到 data fix 的时候不喜欢重现, 都是凭感觉给出脚本. 但这样常常忽略一些重要的数据, 容易出错. 如果确定是 data fix, 我们就默认 code 是没有问题的, 给出的脚本就应该和在系统上正确操作得到的结果保持一致.

2. 重现了 bug, 熟悉了整个流程, 就知道问题出在哪儿, 正确的行为应该是怎样的. 这时不是急急忙忙的去分析, 而是去查找. 找什么呢? 就是找以前的人是不是遇到过同样的问题. 查找主要是在 Bug 系统里面, 和 Support 网站上. Bug 系统里面有所有 bug 的历史数据, 根据关键词可以找到类似甚至相同的 bug. 可以看看之前是怎样解决的. 这对 data fix 尤其好用, 因为同一个问题出现 data 问题的几率相对比较高, 参考之前给出的脚本能减少很多劳动. Support 网站上有很多开发和 support 写的 Note, 查找关键字可以找到类似的问题. 这个对 code fix 非常好用. 如果之前已经解决这个 code 问题的话, 直接根据 note 打补丁就好了.

3. 如果 code fix 是不能重现的, 那么多数情况下, 这个问题已经被改过了. 客户由于文件版本较低, 还存在这个问题. 去上面两个网站去找相应的补丁.

4. 如果在这两个网站都没有找到相似的 bug, 那么恭喜你, 遇到了一个新的问题, 你要从头开始自己分析了.

5. 分析的工具无非就是 log. 看 log, 可以跟踪代码走到了哪里. 对我们 INV team 来说, 几个常用的 log 是:

a) INV log

INV log 记录了服务器端代码的流程, 就是 .pls 文件的 log. 如果在文件开头的地方有读取 FND_PROFILE.VALUE('INV_DEBUG_TRACE') 的话, 那么这个文件的日志就是记录在 INV log 里面的. 拿到这个日志, 对于分析代码走到了哪一步非常有用.

b) RTP log

RTP log 是记录系统跑 concurrent request: receiving transaction processor 所记录下的日志. 如果打过 9184617:R12.PO.A 这个patch, 也就是 rvtpt.lpc的版本要高于这个版本120.19.12000000.25 , 那么就可以在 INV log 里面看到RTP 的 log 了. 如果没有打过这个patch, 那么就只能用老办法去收集了. 收集的办法是记录下 RTP id, 然后用下面的 SQL:

    select module, to_char(timestamp,'DD-MON-YYYY HH24:MI:SS'), message_text
    from fnd_log_messages
    where timestamp > sysdate - 2/24
    and process_id = ( select os_process_id from fnd_concurrent_requests where request_id = &request_id)
    and module like 'po%'

c) FRD log

FRD 的全称是 forms runtime diagnostics, 就是记录 form 运行时候所有触发器的日志. 这个里面可以清楚的看到触发器触发的顺序, 以及在里面做了什么事情. 如果客户的 bug 是属于 form runtime 进程报错的话, 里面就会显示在那个触发器里面报的错, 然后要做的事情就是看代码了.

d) SQL trace

SQL trace 记录的是数据库所有的操作的日志. 包括所有的操作语句, 绑定值, 性能问题, 还有 SQL 报错. 只要看报什么错, 找到那句 SQL, 差不多就解决了一半问题了.

e) fnd_new_messages

这是数据库的一个表, 记录了所有的错误信息. 如果客户报了一个错, 可以通过下面的 SQL 去找到对应的错误记录

select * from fnd_new_messages where message_text like 'Quantity entered should be less than or equal to available quantity%'
然后到代码里面去找到报错的地方就好了. 通常一个错误信息只在一个地方报出来, 所有很容易找到对应的代码.

通过上面的几个日志, 差不多能够定位到 bug 发生的代码了. 接下来的事情就是去 code fix 或者给客户提供脚本.

最后重要的一点就是, 无论 code fix 还是提供 data fix script, 都要让其他开发 review 一下, 以免出现问题.


推荐阅读
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文介绍了如何使用 PostgreSQL 的 `UPDATE ... FROM` 语法,通过映射表实现对多行记录进行高效的批量更新。这种方法不仅适用于单列更新,还支持多列的同时更新。 ... [详细]
  • 本文详细介绍了如何使用libpq库与PostgreSQL后端建立连接。通过探讨PQconnectdb()函数的工作原理及其在实际应用中的使用方法,帮助读者理解并掌握建立高效、稳定的数据库连接的关键步骤。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
author-avatar
人散心未散1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有