当前位置:网站首页>C语言:实用调试技巧
C语言:实用调试技巧
2022-08-11 04:52:00 【某某小卢】
为什么要学习调试技巧?
因为我们会写出bug,而且有时候自己找不到。
一名优秀的程序员是一名出色的侦探。
每一次调试都是尝试破案的过程

我们应该如何寻找和修改bug呢?
目录
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可以改变。
边栏推荐
- 洛谷P4560 Wall 砖墙
- 02.折叠隐藏文字
- Switch and Router Technology-29-OSPF Virtual Link
- 澳大利亚网络空间安全体系建设论析
- "239 Sliding Window Maximum Value" on the 16th day of LeetCode brushing
- Dry goods: The principle and practice of server network card group technology
- send_sig: kernel execution flow
- ALSA音频架构 -- aplay播放流程分析
- 交换机和路由器技术-31-扩展ACL
- 洛谷P4847 银河英雄传说V2
猜你喜欢

【电商运营】社交媒体营销策略该如何制定?

无线电射频能量的收集

交换机和路由器技术-31-扩展ACL

Self-research capability was recognized again, and Tencent Cloud Database was included in the Forrester Translytical report

梅克尔工作室--OpenEuler培训笔记(1)

IP-Guard如何禁止运行U盘程序

svg-icon的使用方法(svg-sprite-loader插件)

Switch and Router Technology-29-OSPF Virtual Link

Harvesting of radio frequency energy

Overview of the JVM garbage collection and mechanism
随机推荐
【FPGA教程案例49】控制案例1——基于FPGA的PID控制器verilog实现
网络安全培训机构哪家好?排名怎么选择?
02.折叠隐藏文字
Jetson Orin platform 4-16 channel GMSL2/GSML1 camera acquisition kit recommended
直播软件搭建,流式布局,支持单选、多选等
svg-icon的使用方法(svg-sprite-loader插件)
在 关闭页面/卸载(unload)文档 之前向服务器发送请求
【电商运营】社交媒体营销策略该如何制定?
交换机和路由器技术-22/23-OSPF动态路由协议/链路状态同步过程
async(异步)和await的使用
二叉堆的基础~
How to switch Green Shield encryption to IP-Guard encryption smoothly
洛谷P2245 星际导航
Self-research capability was recognized again, and Tencent Cloud Database was included in the Forrester Translytical report
Kong实现禁止国外IP访问
CAD2020 打开错误报告 e06d7363h Exception at 13644F69h
交换机和路由器技术-25-OSPF多区域配置
【FPGA教程案例50】控制案例2——基于FPGA的PD控制器verilog实现
Events and scheduled tasks in Mysql
简历里写了会代码,却依然过不了面试这一关