C语言:实用调试技巧

为什么要学习调试技巧?

因为我们会写出bug,而且有时候自己找不到。

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

我们应该如何寻找和修改bug呢?

目录

1.程序的两种类型(debug和release类型)

几个常见的快捷键

各种调试窗口

a.自动窗口

b.局部变量

c.监视

d.内存

编程常见的错误

a.编译型错误

b.链接型错误

c.运行时错误

利用一个例子来了解const和assert


1.程序的两种类型(debug和release类型)

  • Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
  • Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

debug是程序员(也就是我们这群苦逼)尝试用的,它会有调试的过程。

release是用户使用的,它直接出结果

如果我们要进行调试的话,只能在debug的环境下

  • 几个常见的快捷键

F5

启动调试,经常用来直接跳到下一个断点处。

F9

创建断点和取消断点

断点的重要作用,可以在程序的任意位置设置断点。

这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

F10

逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。

F11

逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最

长用的)。

CTRL + F5

开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

F5和F9是搭配使用的,F9是在任意一行设置断点,而F5直接跳到断点的地方,然后停在那里。

  • 各种调试窗口

想要进入自动窗口等调试窗口,得先按F10!才会出现那些窗口

a.自动窗口

这个会自动跳出运行某一行时的变量,你不能查看你想看的变量的,所以这种方法对于我们来说是不方便的

b.局部变量

局部变量的窗口就在自动窗口下面一个。

局部变量这个窗口就是你指向哪一部分,它将那一部分所有的局部变量的值展现给你看。

c.监视

监视可以让我们看到我们想要的变量或者地址!!!

还是监视比较方便

d.内存

同理还有函数堆栈等窗口没有尝试,但操作方法一样。

  • 编程常见的错误

a.编译型错误

基本上就是像这样的语法错误,这种语法错误会因为随着我们多打代码,可以自己发现,并且自己改正,相对简单。

b.链接型错误

基本上就是因为自己未定义函数或者未初始化变量所组成的,这个和上一种错误一样,相对简单、。

c.运行时错误

这种运行时错误指的是,可以运行成功,但运行结果错误,这种错误往往是最致命的。

示例1演示:

我们是求1!+2!+3!的值,我们通过监视,发现3!的值变为12,而不是6。这里我们分析后,发现上一次算2!的值没有重置保留了下来,所以造成了错误。在11行加一句ret=1就可以了。

  • 利用一个例子来了解const和assert

assert可以来判断是否出错了,例如:这里判断传过来的是否是空指针,如果是空指针就报错。

assert的头文件是#include

我们可以利用assert来提高代码的安全性。

const可以放在两个位置,一个位置是*的左边,一个是*的右边

放在*的左边,*p不能改变了,p可以改变。

放在*的右边,p这个地址不能改变了,*p可以改变。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学IT的小卢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值