亚网互联网站设计/广东短视频seo搜索哪家好
✨✨ 欢迎大家来到贝蒂大讲堂✨✨
🎈🎈养成好习惯,先赞后看哦~🎈🎈
所属专栏:C语言学习
贝蒂的主页:Betty‘s blog
1. 什么是调试
当我们写代码时候常常会遇见输出结果不符合我们预期的情况,那这时候我们该怎么办呢?
这时候我们就需要调试(debug),调试简单来说就是去寻找问题,找到错误原因,修改代码的过程。
2. Debug和Release
- 在VS编译器中有着这Debug和Release两个选项,他们分别是调试版本与发布版本,那这两者有什么区别么,我们可以看看下表
名称 | 优点 | 缺点 |
---|---|---|
Debug | 包含调试信息,易于调试 | 未做任何优化,体积大 |
Release | 体积小,编译时对应用程序的速度进行优化 | 无法调试 |
- Debug文件与Release文件(需要代码运行才生成)
通过观察我们可以知晓,Release生成的应用文件要比Debug生成的应用文件小的多
3. 调试快捷键
我们在调试过程中可以使用一些快捷键帮助我们节省时间。
下表列出了比较常用的快捷键以及其功能:
快捷键 | 功能 |
---|---|
F5 | 启动调试,经常⽤来直接跳到下⼀个断点处,⼀般是和F9配合使⽤。 |
F9 | 创建断点和取消断点 |
F10 | 逐过程,通常⽤来处理⼀个过程,⼀个过程可以是⼀次函数调⽤,或者是⼀条语句。 |
F11 | 逐语句,就是每次都执⾏⼀条语句,但是这个快捷键可以使我们的执⾏逻辑进⼊函数内部。在函数调⽤的地⽅,想进⼊函数观察细节,必须使⽤F11,如果使⽤F10,直接完成函数调⽤。 |
CTRL+F5 | 开始执⾏不调试,如果你想让程序直接运⾏起来⽽不调试就可以直接使⽤。 |
- 断点的作⽤是可以在程序的任意位置设置断点,打上断点就可以使得程序执⾏到想要的位置暂定执⾏,接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执⾏细节。
4. 监视和内存观察
4.1 监视
在调试的过程中我们,如果要观察代码执⾏过程中上下⽂环境中的变量的值,这时候就要用到监视
比如我们要监视下面这段代码:
int main()
{int i = 0;for (i = 0; i < 10; i++){printf("%d ", i);}return 0;
}
- 打开监视(提前F11启动调试)
- 监视变量
通过监视变量的变化,能够更好的发现错误信息
4.2 内存
除了探究变量改变状况,我们还可以探究变量在内存中的存储
我们还是以上面那段代码举例:
- 打开内存(提前F11启动调试)
- 内存信息
5. 调试举例
5.1 实例一:简单调试
计算 1!+2!+3!的和
错误代码:
int main()
{int i = 0;int ret = 1;int sum = 0;for (i = 1; i <= 3; i++){for (int j = 1; j <= i; j++){ret *= j;}sum += ret;}printf("%d ", sum);return 0;
}
输出结果: 15
有时候我们不能一下子看出错误,这时候我们就需要调试
-
第一步分析
1!=1
sum=1
2!=2
sum=3
3!=6
sum=9
-
监控变量并调试分析
- 第一步没问题,F10继续调试
- 第二步没问题,F10继续调试
- 第三步有问题
- 增加变量继续分析
- 第一步没问题,F10继续调试
为什么ret的值会出现不符合预期的情况呢?我们再次观察代码就会发现ret的值在每次使用后都没有更新,所以出现不符合预期的情况
正确代码:
int main()
{int i = 0;int ret = 1;int sum = 0;for (i = 1; i <= 3; i++){ret = 1;//更新for (int j = 1; j <= i; j++){ret *= j;}sum += ret;}printf("%d ", sum);return 0;
}
5.2 实例二:深度理解
在VS2022、X86、Debug的环境下,下⾯代码输出结果是什么?
#include <stdio.h>
int main()
{int i = 0;int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };for (i = 0; i <= 12; i++){arr[i] = 0;printf("betty\n");}return 0;
}
输出结果:死循环打印betty
为什么会出现下面结果呢?这段代码不是越界访问了吗?这时我们又要调试起来
- 数组未越界时,并没有发现问题
- 数组越界时,我们发现当arr[12]=0时,i也变为0,这也是为什么代码会死循环的原因
- 为什么改变arr[12]的值,i也随之改变呢?我们猜测i与arr[12]的地址相同
- 事实也证明我们的猜测是正确的
那为什么会这样呢?我们要知道以下三点:
- 局部变量一般存储在内存中的栈区
- 栈区内存的使⽤习惯是从⾼地址向低地址使⽤的,所以变量i的地址是较⼤的。arr数组的地址整体是⼩于i的地址。
- 数组在内存中的存放是:随着下标的增⻓,地址是由低到⾼变化的。
图像演示如下:
- 原因:在该环境下,arr与i的地址直接刚好差两个整型,当越界访问到arr[12]时刚好与i的地址重合,所以改变arr[12]的值也会改变i的值,代码也就会死循环
注意:
-
在不同的编译器下可能arr与i空出的空间⼤⼩是不⼀样的,代码中这些变量内存的分配和地址分配是编译器指定的,所以的
不同的编译器之间就有差异了。所以这个题⽬是和环境相关的。 -
栈区的默认的使⽤习惯是先使⽤⾼地址,再使⽤低地址的空间,但是这个具体还是要编译器的实现,⽐如:在VS上切换到X64,这个使⽤的顺序就是相反的,在Release版本的程序中,这个使⽤的顺序也是相反的。
5.3 实例三:断点调试
我们知道了简单调试该如何去调,那断点调试该如何去进行呢?
我们以下面这段代码举例:
int main()
{int i = 0;for (i = 0; i < 100; i++)//第一步{printf("Betty ");}int arr[10] = { 0 };for (i = 0; i < 10; i++)//第二步{//.....}return 0;
}
- 如果我们可以确定第一步没有问题,问题出现在第二步,如果一步一步调试的话,要调试100次才会到第二步
- 所以这时候我们就需要用到断点
- 首先我们选中要调试的行数,按下F9打下断点,然后F5开始调试
- 如果觉得第一步i==50时有问题,也可以在第一步设置断点,然后右击断点设置条件
6. 编译器报错
6.1 编译型错误
编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝⻢迹,双击错误信息也能初步的跳转到代码错误的地⽅或者附近。
6.2 链接型错误
链接型错误一般是因为标识符名不存在,拼写错误,头文件未包含,引⽤的库不存在
6.3 运⾏时错误
运行时错误复杂多样,一般需要借助调试的手段才能发现
相关文章:

精通 VS 调试技巧,学习与工作效率翻倍!
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 什么是调试 当我们写代码时候常常会遇见输出结果不符合我们预…...

yarn 安装包时报“certificate has expired”
在通过yarn包管理器安装 yarn install 时候 报错: info No lockfile found. [1/4] Resolving packages... error Error: certificate has expired at TLSSocket.onConnectSecure (node:_tls_wrap:1539:34) at TLSSocket.emit (node:events:513:28) at…...

Qt5项目拆解第一集解决:中文乱码| 全局字体|注册表|QSS/CSS
# 一、乱码解决代码片段 QTextCodec是Qt中用于处理文本编码和字符集转换的类。它提供了一系列静态函数来实现不同编码的文本转换,包括编码转换、字符集检测和转换、以及数据流中的文本编码处理。QTextCodec类使得Qt可以在不同的编码和字符集之间进行无缝转换,从而方便地处理…...

消息队列RabbitMQ.01.安装部署与基本使用
目录 RabbitMQ的作用 Message queue 释义 问题思考 存在的问题 优化方案 案例分析 带来的好处 消息队列特点 Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ 3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查…...

1.24号c++
C绪论 c是c语言的扩充,C包含了C的所有属性,换一句话说,C语言在C中都合法。 C语言编程思想:面向过程 c编程思想:面向对象 可以说在C中一切皆对象。 c的三大属性:封装,继承,多态。…...

【GitHub项目推荐--12 年历史的 PDF 工具开源了】【转载】
最近在整理 PDF 的时候,有一些需求普通的 PDF 编辑器没办法满足,比如 PDF 批量合并、编辑等。 于是,我就去 GitHub 上看一看有没有现成的轮子,发现了这个 PDF 神器「PDF 补丁丁」,让人惊讶的是这个 PDF 神器有 12 年的…...

React16源码: React中的PortalComponent创建, 调和, 更新的源码实现
PortalComponent 1 )概述 React Portal之所以叫Portal,因为做的就是和“传送门”一样的事情render到一个组件里面去,实际改变的是网页上另一处的DOM结构主要关注 portal的创建, 调和, 更新过程 2 )源码 定位到 packages/react-…...

Hive-SQL语法大全
Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法,在语法描述中出现: [],表示可选,如上[LOCATI…...

编译原理2.3习题 语法制导分析[C++]
图源:文心一言 编译原理习题整理~🥝🥝 作为初学者的我,这些习题主要用于自我巩固。由于是自学,答案难免有误,非常欢迎各位小伙伴指正与讨论!👏💡 第1版:自…...

JUC-CAS
1. CAS概述 CAS(Compare ans swap/set) 比较并交换,实现并发的一种底层技术。它将预期的值和内存中的值比较,如果相同,就更新内存中的值。如果不匹配,一直重试(自旋)。Java.util.concurrent.atomic包下的原…...

Effective C++——关于重载赋值运算
令operator返回一个*this的引用 在重载,,*等运算符时,令其返回一个指向this的引用。 class MyClass {int* val; public:MyClass(int i) : val(new int(i)){}MyClass():val(new int(0)){}void print() {cout << *val << endl;}MyClass& operator(co…...

vscode debug
需要对GitHub上的工程debug。 所以花时间看了下,参考了bili视频和chatgpt的解答。 chatgpt给的步骤 要在 VS Code 中调试 C++ 项目,可以按照以下步骤进行设置和操作: 确保已安装 C++ 扩展:在 VS Code 中选择 “Extensions”(或使用快捷键 Ctrl+Shift+X),搜索并安装官…...

数据库选型其实技术维度不太重要
看到这个标题可能觉得我在乱说,数据库选型要从多个角度和维度看来,还有各种POC。很多供应商朋友告诉我POC是一个漫长的过程,非常痛苦,要解决各种技术问题。怎么能说和技术无关呢? 因为从我的经历和周围听说的经验来说…...

【C++】入门(二)
前言: c基础语法(下) 文章目录 五、引用5.1 引用概念5.2 引用使用规则5.3 常引用5.4 引用的使用场景5.5 引用和指针的区别 六、内联函数6.1 概念6.2 内联函数的特性 七、auto关键字(C11)7.1 概念7.2 使用规则7.3 用于f…...

Nginx 代理服务路径带/和不带/的问题
nginx初始配置如下 server {listen 6087;location / {#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。#例如,您的网站运行目录在/etc/www下,则填写/etc/www。#允许跨域请求的域,* 代表所有add_header Access-Control-…...

C# CefSharp 输入内容,点击按钮,并且滑动。
前言 帮别人敲了个Demo,抱试一试心态,居然成功了,可以用。给小伙伴们看看效果。 遇到问题 1,input输入value失败,里面要套了个事件,再变换输入value。后来用浏览器开发工具,研究js代码,太难了&a…...

历经15年,比特币以强势姿态进军华尔街!270亿美元投资狂潮引发市场震荡!
本月,比特币庆祝了它的15岁生日,并以强势的姿态进军华尔街。最近美国交易所开始交易的比特币交易所交易基金(ETF),已经获得了投资者的广泛接受。这一进展标志着比特币作为一种年轻资产迈向成熟的重要里程碑。 根据Glas…...

GBASE南大通用的接口程序GBase ADO.NET
GBase ADO.NET 是一个提供.NET 应用程序与 GBase 数据库之间方便、高效、 安全交互的接口程序,使用 100%纯 C#编写,并继承了 Microsoft ADO.NET 类。 开发人员可以使用任何一种.NET 开发语言(C#、VB.NET、F#)通过 GBase ADO.NET 操…...

算法训练营Day57(回文子串--总结DP)
647. 回文子串 647. 回文子串 - 力扣(LeetCode) class Solution {public int countSubstrings(String s) {int len s.length();//i到j这个子串是否是回文的boolean [][] dp new boolean[len][len];int res 0;for(int i len-1;i>0;i--){for(int …...

使用OpenCV从一个矩阵提取子矩阵
介绍opencv的两个函数:Range()和Rect() Range()是用于表示一个范围的类。它的构造函数有两个整数参数,分别表示范围的起始和终止索引。这个范围包括起始索引但不包括终止索引。 cv::Range(int start, int end); /* 在OpenCV中,cv::Range() …...

微信云托管:基本使用指南
微信云托管 🚨推荐:微信云托管:基本使用指南 确实是个好平台,部署个项目很简易,免去了很多运维上的事情。 一、微信云托管 github 流水线配置 和 端口号 首先,这里的主体(宿主机),指的就是你的…...

WEB前端IDE的使用以及CSS的应用
IDE的使用 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…...

python中排序函数sorted的简单运用
# 假设a里面的()分别对应的x,y,w,h 即 (x,y,w,h) a [(2,3,1,2),(4,1,2,2),(1,6,2,1)] # a:传入的列表 # key 排序的数据 keylambda x:x[n] 是固定写法,里面的n代表你按照()中第几个数据的值排序 # eg:我们这里是x:x[0]表示我们按x排序, 如果改成x:x[1]则按y排序 # …...

k8s的helm
1、在没有helm之前,部署deployment、service、ingress等等 2、helm的作用:通过打包的方式,deployment、service、ingress这些打包在一块,一键部署服务、类似于yum功能 3、helm:官方提供的一种类似于仓库的功能&#…...

[MySQL]基础的增删改查
目录 1.前置介绍 2.数据库操作 2.1显示当前数据库 2.2创建数据库 2.3 使用数据库 2.4 删除数据库 3.常用数据类型 3.1整型和浮点型 3.2字符串类型 4.表的操作 4.1查看表结构 4.2创建表 4.3删除表 5.重点 5.1操作数据库 5.2常用数据类型 5.3操作表 1.前置介绍 …...

简易播放器 以及触发的异常
jl 1.0.jar 架包导入步骤: 1.读取到MP3音频文件 2.创建播放器对象,传入音频文件 3.开始播放 package com.ztt.Demo01;import java.io.FileInputStream; import java.io.FileNotFoundException;import javazoom.jl.decoder.JavaLayerException; import javazoom.jl.…...

【Flutter跨平台插件开发】如何实现kotlin跟C++的相互调用
【Flutter跨平台插件开发】如何实现kotlin跟C的相互调用 kotlin 调 c 在 Kotlin 中,可以使用 JNI (Java Native Interface) 来调用 C 代码 调用步骤: 创建 C 文件并实现函数。 // example.cpp #include <jni.h>extern "C" JNIEXPORT jstring J…...

Apache SeaTunnel社区荣获“2023快速成长开源项目”奖项
在这个开源理念推动技术创新和全球协同发展的时代,SeaTunnel社区在开放原子开源基金会举办的2023年开源项目评选中脱颖而出,荣获“2023快速成长开源项目”殊荣。 这个奖项不仅仅是对Apache SeaTunnel社区过去一年发展速度和质量的认可,更是对…...

Unity 桥接模式(实例详解)
文章目录 示例1:角色与装备系统示例2:UI控件库示例3:渲染引擎模块示例4:AI决策树算法示例5:物理模拟引擎 在Unity游戏开发中,桥接模式(Bridge Pattern)是一种设计模式,它…...

Xftp连接不上Linux虚拟机的原因解决方法
前言: 在当今数字化时代,远程连接到Linux虚拟机是许多开发者和系统管理员日常工作的一部分。然而,有时候,面对Xftp连接不上Linux虚拟机的问题,我们可能感到困惑和无措。这个看似小问题可能导致工作中断,因…...