程序的调试

一名优秀的程序员也是一名出色的侦探,每一次调试都是尝试破案的过程

前言

主要是怎么调试,调试的注意事项,调试中常见的错误和遇到的问题


一、什么是调试?

第一次发现导致计算机错误的飞鹅: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.常见错误

编译错误:直接有错误提示信息

链接错误:无法解析的外部符号

运行错误:能够调试的都是运行错误

总结

(未完待续....)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值