* 错误类型
一般来说,每100行代码会有两个左右的错误。错误类型可划分如下:
- 功能定义错误
- 设计规划错误
- 代码编写错误
空运行(dry running):在纸上执行程序的核心代码的过程。
* 程序调试阶段
- 测试:找出程序中存在的缺陷或错误。
- 固化:让程序的错误可重现。
- 定位:确定相关的代码行。
- 纠正:修改代码纠正错误。
- 验证:确定修改解决了问题。
* 调试工具
1> gdb
栈跟踪:backtrace
打补丁:set variable n = 20 /*修改程序(变量值)而不需要改变程序的源代码并重新编译,也被称为打补丁*/
2> 静态分析:只能通过程序的源代码提供信息
- ctags:为程序中的所有函数创建索引。每个函数对应一个列表,在列表中列出该函数在程序中的调用位置。
用法:
ctags [-a] [-f filename] sourcefile sourcefile ...
ctags -x sourcefile sourcefile ...
-
cxref:分析C语言源代码并生成一个交叉引用表。它可以显示每个符号都在程序的哪个位置使用过,它生成的是一个经过排序的列表,每个符号的定义位置用一个星号(*)做标记。
- cflow:打印出一个函数调用树,它显示了函数之间调用的关系。它可以让我们看清楚一个程序的框架结构,理解它的操作流程,了解对某个函数的改动将会产生怎样的影响。
3> 动态分析:提供与程序执行过程中的行为有关的信息。如,已经执行了哪些函数以及这些函数的执行时间。
prof/gprof产生执行存档。
程序的执行存档可以显示执行它所花费的时间具体都用在什么操作上。
4> lint:清理程序中的“垃圾”
splint:提供有用的代码审查注释
5> 内存调试
valgrind:检测数组访问错误和内存泄露。