学习笔记——vs调试

What is bug?

来源:最早计算机程序出故障后,维修人员在其中找到了一只虫子,后来令程序故障的问题,被称为bug,找bug的过程就是调试(Debug)。

调试重要吗?

对于初学者而言,如果不了解调试,不会调试。在遇到bug的时候,你可能会苦恼:为什么无法运行?为什么结果不对?然后用眼睛去看自己的代码,经过漫长的修改之后,程序可以运行了,你可能依旧苦恼:为什么这样可以?苦思冥想后开始怀疑自己,去各大平台去找相关资料,认为自己没有学好,想要重学一遍,然后时间这样过去了,可能还没学到什么东西。相信我,这样重复几次,你会怀疑自己不适合干这个,

调试步骤:

1.发现程序的错误所在   

2.以隔离、消除等方式对错误进行定位。

3.确定错误产生的原因

4.提出纠正错误的解决办法

5.对程序错误进行改正、重新测试.

这是一般公司里的调试步骤,那么对于初学者个人而言的调试是怎样的呢?

Part1:

Debug   Release 

Debug版本和Release版本在vs2022版本中可以在上方栏中显示,根据需要进行切换,

在我们编译前(创建工作区后),找到对应文件,在编译后会出现一个x64,里边会有debug文件夹,里头有着该程序的可执行文件。再换成Release版本,编译运行后会出现Release文件夹,其中同样会有一个可执行文件。调试版本和发布版本有什么区别呢?

Part2:

可调试 大小 功能 环境

Debug版本是可以调试的版本,具备调试环境,大小也要比Release版本大很多,因为Release版本是对代码进行优化过的,且不具备调试环境,也是测试去测的那个版本。

Part3:

环境配置 快捷键 F5 F9 F10 断点 F11

首先要进行环境配置,这里只需要调为Debug版本就可以了,再了解一下常用的快捷键及其功能,F5,是开始调试,F9是设置断点(也可以用鼠标点击行左边),F5会按照逻辑将程序运行到下一个断点处停下。F10是逐过程一步一步往下走,但不会进入函数中去,F11是逐语句,和F10类似,但会进入到函数中去(自定义的那种),Shift+F11跳出函数。Shift+F5会结束调试,Ctrl+F5是直接执行而不调试,更多快捷键可以去编译器里找。

Part4:

观察 窗口 监制 自动 局部变量窗口 内存 反汇编 寄存器 调用堆栈 条件断点

调试的时候我们是需要去观察一些数是如何变化的,它们的地址在哪?这个时候我们就需要一些窗口。调试的时候点击窗口,会有很多,这里先介绍一下自动窗口和局部变量窗口,它们所观察的对象都是由编译器自动加上的,也会自动删除,不同的是后者出现的是局部变量,创建时出现,出函数或者某个{}的时候就会消失,并且这两个窗口是无法添加变量的。

监视窗口,这个功能和前两者相同,但需要自己添加想要观察的对象,可以添加和删除。

内存窗口,会以十六进制显示地址和内存单元内的内容。

反汇编,寄存器,前者会给出每一步对应的汇编,后者会把寄存器中的数据以十六进制显示出来。

调用堆栈窗口,会显示调用函数的顺序等。

条件断点:在断点(红点)处右击可以找到。作用:例如在for循环中可以讲条件设置为i==4等来使程序停在此处。

Part5:strcpy函数示例  assert断言函数  函数优化 常量const

自己去实现strcpy函数,我们自己写函数,当然知道它是干什么用的,但我们写代码终究(吃饭)是给他人用的,保不准就会用一些奇怪的数字,从而导致程序崩溃。一个安全的代码要考虑这些事情。针对这个问题,我们有assert函数,它会更具我们输入的判断来提示错误assert(p!=NULL),当p==NULL时会输出一个错误信息在界面上。

这就够了么?还没有!万一有人把两个顺序搞反了,这个时候恰好字符数量相同,对方只是调用了一下,以为成功了,那就很危险了,他可能会因此调试大半天。

Const,放在变量前,使其值不可再改变,const*p :这里指的是(*p)不可改变,也就是值,这样顺序反了编译器也会报错。看另一个*const p:这里是指(p)不可改变,p是指针变量,里边存放的是地址。此时地址不可变。

Part6:

常见错误:编译,链接 无法解析 外部 名字 定义 运行时

写代码常见的错误,编译错误,就是单纯的语法错误,链接错误,编译器会显示一个无法解析的外部命令等,一般是调用的函数未定义或者名字打错了,还有一个就是运行时出现的错误这个错误比较难搞,需要自己去调试,大多是逻辑错误。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值