Java程序排错定位

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

一、错误的分类

1、有报错的错误

2、没报错的错误

二、错误的定位

1、检查有没有报错信息

2、检查标准输出文件和异常输出文件有没有报错信息

3看代码


一、错误的分类

程序运行出错指的是程序未按照程序预设的逻辑执行从而造成非预期的结果具体表现就是报错中断或数据错误。作为程序员一定要分清哪口锅是自己的对于设计中的预设错误一定要甩出去例如传入参数不合法、违反业务规则等等。本节我们只考虑自己的锅。自己这口锅里能装的错误也很多但是我们不考虑纯粹的认为因素造成的运行出错(例如版本遗漏、配置错误等等)。

1、有报错的错误

造成这一类错误的原因主要有

A. 开发过程不严谨没有进行必要的判断或没有充分的考虑各种可能的分支(这就是为毛好些java规范里要求if和else要成对出现的原因)这类错误里最为常见的异常就是空指针、下标越界、除数为0等运行时异常了;

B. 内存泄露问题。java对指针进行的透明化处理GC操作大多数时间也由JVM自主完成但是毕竟内存中的数据是程序在运行过程中塞进去的如果数据的生命周期设计存在问题的话很容易会造成OOM错误。前段时间和一个朋友就聊到了这个问题他所在公司的一个项目就是因为未及时释放有效数据导致jvm内存占用持续增高即使JVM执行FullGC操作后内存占用率依旧很高从而导致OOM错误。

C. 捕获的范围小了预期外的错误未捕获。在一个项目中就遇到过这种情况程序只对Exception进行了捕获未捕获Error导致程序在抛出了一个Error(那次是一次人为的原因)而导致未回滚数据库事务造成了锁表。

2、没报错的错误

造成这一类错误的原因主要有

A. 虽然抛出了错误但是被吃掉了。就是在catch到Exception后没有进行任何处理包括打印日志。这个的原因就不多说了...说多了都是泪。

B. 程序正常执行完成但是结果不符合预期。这个原因很可能是程序未对并发安全进行设计。

C. 无限等待超时时间设置不合理或者死锁。

二、错误的定位

定位错误是有一个大概的顺序的。

1、检查有没有报错信息

日志文件中登记的错误这个算是最简单的在定位错误时也最希望问题在这一步得到确认。在打印异常时通常会打印异常的调用栈信息通过调用栈信息就可以很便捷的定位问题了。

2、检查标准输出文件和异常输出文件有没有报错信息

Error可能不会打印在日志文件中(如果关掉了标准输出就不会打印了)但是会打印在标准输出中前提是没有把标准输出也吃掉。通常在出现错误时单单通过检查日志来定位问题怕是不足以说明问题通常还会配合dump文件进行分析因此在程序启动时需要开启相应参数(-XX+HeapDumpOnOutOfMemoryError)在JVM出现内存溢出异常时Dump出当前的内存堆转储快照以便后续进行分析。

3、看代码

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java