程序的调试
一名优秀的程序员也是一名出色的侦探,每一次调试都是尝试破案的过程
目录
前言
一、什么是调试?
二、调试
1.调试是什么
2.基本步骤
三、调试注意事项
1.怎么写出易于调试的代码
assert(断言)
const
2.常见错误
总结
前言
主要是怎么调试,调试的注意事项,调试中常见的错误和遇到的问题
一、什么是调试?
第一次发现导致计算机错误的飞鹅:bug 英语单词“昆虫”的意思
二、调试
1.调试是什么
找代码里面问题的过程
一切发生的事都有迹可循
迹象越多越容易顺滕而上 (推理)
2.基本步骤
发现程序错误的存在
以隔离,消除等方法对错误进行定位
确定错误产生原因
提出纠正错误的解决办法
对程序错误改正,重新测试
基本选项了解:
debug调试
release发布版本(编译器自动优化)
IDE--集成开发环境
F5启动调试
F11逐语句(可以进入函数内部 细节)
F10逐过程
F9创建短点和取消断点(在多行程序或多文件适用),可以在程序任意位置设置断点
control+f5开始执行不调试
三、调试注意事项
调试的时候查看程序信息
一定要先开始调试,才能看到监视窗口!
观察内存:调试>窗口>内存
指针变量的内容和地址是不一样的,指针指向一个常量或变量,指针自己也占一个空间,有自己的地址,空间里的内容是所指常量或变量的地址
如下例:
?是随机值
反汇编能看到程序翻译成的汇编代码
查看临时变量:调试时会自动更新变量的值,使用起来不是很友好
查看调用堆栈
补充知识点:
数据结构中:
队:排队,后进前出
栈:栈帧,一堆,上进上出,(汉诺塔)
栈区:局部变量
堆区
静态区
栈区的使用习惯是先使用高地址处空间
1.怎么写出易于调试的代码
代码运行正常
bug少
效率高
可读性高
可维护性高
注释清晰
文档齐全
常见的coding技巧
使用assert(断言)<assert.h>
尽量使用const
养成良好的代码风格
添加必要注释
避免编码陷阱
assert(断言)
assert中可以放一个表达式,表达式的结果为假就报错,反之则不发生状况。可以利用assert来检测程序中的bug,如检测指针p的值是不是为null,但只能在debug环境下使用,在release中assert的报错会被自动优化。
const
const修饰一个变量时,变量被保护,不能再修改变量的值
const修饰指针时
放在*的左边,修饰指针变量指向的内容,表示指向指针的内容,不能通过指针来改变了;但指针变量本身可以修改
const int *p=#
*p=10;//err
p=&n;//ok
放在*右边,修饰指针变量本身,表示指针变量本身不能被修改;但是指针指向的内容可以通过指针来改变
int * const p=#
*p=10;/ok
p=&n;//err
2.常见错误
编译错误:直接有错误提示信息
链接错误:无法解析的外部符号
运行错误:能够调试的都是运行错误
总结
(未完待续....)