1. 看待问题
遇到更高级的bug,解决更重要的问题,是开发同学的迭代生活。
遇到问题、分析问题、定位问题、并寻求优雅的方式方法解决问题,为我们不断成长提供了素材。
2. 为什么要debug
bug在所难免。问题在于怎么减少不必要的bug,以及快速解决问题!
- 提升个人技术素养,最大限度减少bug,降低版本交付风险。面向对象能力、UT能力等基本功最应该重视和掌握。
- 另一方面,bug在于难免。要积累一些解决问题的套路和方法。
3. 我理解的问题定位能力
debug能力其实就是定位问题的能力。那如何提升自己定位问题的能力?
- 首先,对业务逻辑以及数据交互流程应该有清晰的了解。
- 其次,对所涉及的技术知识、基本原理有一定的认识,积累一些所谓的“坑”。
- 再次,针对具体的业务场景及其技术应用,积累一些工具方法,提升效率。
4. debug能力模型的4个层级
L1(入门级) 只会查看堆栈
"① 只会通过日志打印、查看堆栈信息定位问题"
补充:熟悉日志记录框架,代码中日志记录符合可审计的基本要求。
L2(初级) 基础调试
"① 可以通过IDE的可视化方法进行单步调试、断点设置等手段定位问题
② 了解JVM的运行机制,了解其中线程调度、垃圾回收、JMM、GC的优化策略等
③ 了解Eclipse或JDB调试原理
④ 了解jstack,jmap,jstat工具原理,并能定位简单的性能问题(GC、同步、I/O、代码执行性能等)"
L3(中级) 中级调试
"① 精通JVM的运行机制,了解其中线程调度、垃圾回收、JMM、GC的优化策略等
② 精通Eclipse或JDB调试原理
③ 能熟练的使用Eclipse或JDB定位问题,进行远程调试
④ 熟练掌握jstack,jmap,jstat等工具,能定位中等难度的性能问题
⑤ 了解其他的性能调优分析工具及方法:OQL、Visual VM、Java Flight Recorder等
⑥ 辅导低级别员工进行调试,使用调试工具"
L4(高级) 高级调试
"① 可以通过JDB附加进程,调试定位问题
② 精通JAVA调试原理,熟练掌握jstack,jmap,jstat等工具,能定位高难度的性能问题
③ 熟练掌握其他的性能调优分析工具及方法:OQL、Visual VM、Java Flight Recorder等
④ 能承担部门级调试技术赋能"
5. 小结与扩展
从问题定位的场景来看,或许也可以分为迭代开发中的debug和线上问题的攻关定位。
迭代开发中的debug调试方法:
1. 本地断点调试
2. 服务器上远程调试
3. 日志查看:业务日志、数据库日志、操作系统日志
4. JVM堆栈信息
线上问题定位方法:
1. 日志采集与查看
2. 堆dump信息,GC日志、堆栈信息
本文对debug能力的理解做简要记录。写在文末:
- 重视java基础/OO能力/UT能力等基础,注重编码质量
- 积累项目公共组件和基本框架流程的理论和实践经验
- 具体问题具体分析