No.14 程序调试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了No.14 程序调试相关的知识,希望对你有一定的参考价值。

程序排错与程序开发是一个不可分割的整体,广义的程序开发包括程序调试,要正视程序排错

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),逐个击破;确定范围,缩小范围,对缩小后的范围再分段,循环,找到问题所在
  • 分模块调试
  • 调试心态
    • 谁都会出错
      • 写和调本就是一个整体,没有不需要调的程序。调程序本身也不是个简单、轻松的事情。做好心理准备
    • 调比写更费时
      • 调试时间往往难以估计,如果碰到古怪问题的话
      • 难免产生烦躁 ;换个环境、心情调剂一下
      • “细活”,不是蛮力坚持可以解决的,保持头脑清醒;如果已经很长时间了,不如中断一下,恢复脑力、精力,往往有奇效。(跳出来的时候往往更清醒,更理智)

以上是关于No.14 程序调试的主要内容,如果未能解决你的问题,请参考以下文章

vs2005不能调试ASP.NET程序

vs2010 运行并调试程序和运行不调试的区别

如何使用Code:Blocks调试C语言程序

Dev c++程序不能调试为啥?

php异步调试和线上调试网站程序

常用的C/C++程序调试工具都有哪些?