程序排错与程序开发是一个不可分割的整体,广义的程序开发包括程序调试,要正视程序排错
1. 程序的可调试性
- 添加注释
- 使用log
- log4j:辅助程序调试;记录程序的运行日志
- logger及其继承关系
- 只有当方法的优先级高于/等于logger的优先级时才会输出
- 如果程序没有显示地指定某个logger的level,将继承离他最近的祖先的level
- 将logger的名字与它所在的类的全类名相同
- logger继承体系与类的继承体系相同
- 当控制某个包内的调试信息时,设置该变 以该 包名 为 名字的 logger的level即可
- Appender和layout
- Appender:输出到哪
- layout:输出格式,怎么样个形式输出
- 具体使用:参考http://www.cnblogs.com/leo-lsw/p/log4j2tutorial.html
2. 程序调试的基本方法
- 编译器的代码审查
- 跟踪执行流程(单步调试)
- 断点调试
- 隔离调试(整段注释,调试剩下的,推荐给每行添加单行注释,而非对整段多行注释)
- 错误重现:有些错误比较隐蔽,不是每次都会出现。常见:多线程中,猜测后通过添加额外条件验证猜测,使得问题每次都能够出现,然后排错
3. 记录常见错误
- 常用的了解
- 搜索引擎
4. 程序调试的整体思路
- 有错误信息是幸福的
- 没有提示信息的排错
- 分段调试:将程序分段,对每段进行分开调试(一般是log),逐个击破;确定范围,缩小范围,对缩小后的范围再分段,循环,找到问题所在
- 分模块调试
- 调试心态
- 谁都会出错
- 写和调本就是一个整体,没有不需要调的程序。调程序本身也不是个简单、轻松的事情。做好心理准备
- 调比写更费时
- 调试时间往往难以估计,如果碰到古怪问题的话
- 难免产生烦躁 ;换个环境、心情调剂一下
- “细活”,不是蛮力坚持可以解决的,保持头脑清醒;如果已经很长时间了,不如中断一下,恢复脑力、精力,往往有奇效。(跳出来的时候往往更清醒,更理智)
- 谁都会出错