当前位置: 首页 > news >正文

C语言学习之调试

         在C语言的编程学习中,我们能不可避免的要遇到bug。通常我们面对编译错误等问题是很容易发现的,但是当我们面对代码结果不满足预期等情况下是很难去改的,因此我们就要学习如何调试代码。

bug与调试

        什么是bug?

        bug本意是“昆虫”和“虫子”的意思,在电脑系统中一般指电脑系统或者程序中隐藏着未被发现的缺陷或者问题,简称程序漏洞。关于bug这个名字有一些历史起源,大家可以自行去搜查,这里不再进行详细地展开说明。

        调试(debug)

        发现问题就要找到并且解决问题,这个找问题的过程就叫做调试,英文叫“debug”。

        调试一个程序首先是承认了出现问题,然后通过各种手段定位查找问题所在的位置,可能逐步调试,也可能是隔离或者屏蔽代码,找到问题所在的位置,然后确定错误的原因,在修复代码,重新测试。

    Debug和release的区别

        在VS中我们会发现这两个按键,分别是什么意思呢?

        Debug通常称之为调试版本,包含调试信息且不做出任何优化,便于调试。

        release称之为发布版本。进行了各种优化,使得程序在大小和速度上都是最优的,方便用户使用。release是用户直接使用的,不包含任何调试信息。

由下图可以发现,对于同一段代码,debug的体积比release体积大了不少。

        

 

 VS调试快捷键

        首先如果要调试,我们必须要在debug环境下进行。

调试常用快捷键:

F9:创建和取消断点。

断点的作用是:可以让程序在任意位置设置断点,打上断点就可以让程序执行到想要的位置暂停执行,接下来我们就可以使用F10、F11这些快捷键来观察代码细节

条件断点:满足这个条件才能触发断点。

F5:启动调试,经常用来直接跳到下一个断点处,一般配合F9使用。

F10:逐过程,经常用来直接跳到下一个断点处,一般配合F9使用

F11:逐语句,通常用来处理一个过程,一个过程可以是一次函数调用也可以是一条语句,但是这个快捷键可以让我们你执行逻辑进入函数内部,在函数调试的地方,想进入函数观察细节,就必须使用F11,如果使用F10,,直接完成函数调用。

Ctrl+F5:开始不挑食,如果你想让程序直接运行不挑食可以直接使用。

VS更多快捷键请参考这篇文章:

https://blog.csdn.net/mrlisky/article/details/72622009

监视与内存观察

        在调试的时候,如果要观察代码执行过程,上下文变量中的值,有哪些方法呢?

下面来看一下吧。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{int arr[5] = { 0 };int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){arr[i] = i + 1;}for (i = 0;i < sz;i++){printf("%d ", arr[i]);}return 0;
}

监视

        开始调试后,菜单栏中【调试】—>【窗口】—>【监视】,打开任意一个窗口均可,输入想要观察的对象。

        

 这里选择任意一个监视窗口都可以,打开监视窗口后我们可以观察到如下界面。

内存 

        如果监视窗口看的不够仔细,也可以观察变量中内存的储存情况,还是在【调试】—>【窗口】—>【内存】

由下图所示,左侧一块的是地址,右侧的则是其对应的值

 计算机中数据的存储和表示都是二进制,但是使用二进制并不方便,因此多数时候使用十六进制。

打开内存窗口后,输入arr、&num这类地址就能观察到改地址处的数据。

常见的错误分类

编译错误

        编译错误一般都是语法错误,这类错误一般看错误信息、双击错误信息就能跳转到一些痕迹,双击错误信息就能跳转到错误所在的附近。编译错误是随着练习时间越来越长就会越来越少的。

链接错误

看错误信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是因为:

1.标识符名字不存在

2.拼写错误

3.头文件没有包含

4.引用的库不存在

运行错误

        运行错误通常就是运行结果不符合预期。这个的原因千变万化,需要慢慢地调试定位才能解决问题。

        本篇文章的内容相较于理论,更加侧重于实际代码练习!!!

        感谢看到这里的读者大大,希望能给一个赞,谢谢。

相关文章:

C语言学习之调试

在C语言的编程学习中&#xff0c;我们能不可避免的要遇到bug。通常我们面对编译错误等问题是很容易发现的&#xff0c;但是当我们面对代码结果不满足预期等情况下是很难去改的&#xff0c;因此我们就要学习如何调试代码。 bug与调试 什么是bug&#xff1f; bug本意是“昆虫”和…...

【project】--模拟搭建一个中小型校园网的网络平台

文章目录 项目介绍设备及IP地址分配node01配置网卡配置DHCP配置路由转发 node02配置网卡配置安装并配置授权 Unbound DNS node03配置网卡配置安装防火墙SNAT配置DNAT配置(端口转发)纯缓存 Unbound DNS 配置 node04配置node05配置node06配置 项目介绍 本项目通过1台物理机和VMw…...

DeepSeek 的长上下文扩展机制

DeepSeek 在基础预训练完成后,引入 YaRN(Yet another RoPE extensioN method)技术,通过额外的训练阶段将模型的上下文窗口从默认的 4K 逐步扩展至 128K。整个过程分为两个阶段:第一阶段将上下文窗口从 4K 扩展到 32K;第二阶段则进一步从 32K 扩展到 128K。每个阶段均采用…...

AQS条件队列源码详细剖析

AQS条件队列源码详细剖析 0.简介 欢迎来到我的博客&#xff1a;TWind的博客 最好先看过我博客中的 ReentrantLock的超详细源码解析 &#xff0c;不然想要理解条件队列的源码会非常困难。 AQS中的条件队列相比同步队列略显简单&#xff0c;但依然优异且高效&#xff0c;复杂而…...

LeetCode --- 446 周赛

题目列表 3522. 执行指令后的得分 3523. 非递减数组的最大长度 3524. 求出数组的 X 值 I 3525. 求出数组的 X 值 II 一、执行指令后的得分 照着题目要求进行模拟即可&#xff0c;代码如下 // C class Solution { public:long long calculateScore(vector<string>&…...

ngrok 内网穿透技术系统性文档

ngrok 内网穿透技术系统性文档—目录 1. 概述与背景1.1 内网穿透的需求背景1.2 ngrok的核心定义1.3 定位与核心价值 2. 核心原理与技术架构2.1 技术架构图2.2 核心原理详解2.2.1 隧道建立流程2.2.2 多协议支持机制2.2.3 动态DNS与路由 3. 功能体系与配置详解3.1 基础功能3.1.1 …...

C++ 为什么建议类模板定义在头文件中,而不定义在源文件中

类模板 XXXX 模板的编译模式模板不是实际的代码&#xff0c;而是一个“代码生成模板” 分离定义会导致链接错误补充为什么普通类可以分离定义&#xff1f;对比C11的export关键字&#xff08;已弃用&#xff09; 模板的编译模式 C模板采用两阶段编译&#xff08;Two-Phase Tran…...

Android studio学习之路(八)---Fragment碎片化页面的使用

fragment的用法很常见&#xff0c;你可能经常看见这样的画面&#xff1a; 通过滑动来进行切换页面&#xff0c;今天我们就来实现这样的形式 介绍 使用 Fragment 的核心价值在于 ​​模块化设计​​ 和 ​​动态适配能力​​&#xff0c;尤其适合以下场景&#xff1a; 需要…...

数据结构和算法(九)--红黑树

一、红黑树 1、红黑树 前面介绍了2-3树&#xff0c;可以看到2-3树能保证在插入元素之后&#xff0c;树依然保持平衡状态&#xff0c;它的最坏情况下所有子结点都是2-结点&#xff0c;树的高度为IgN&#xff0c;相比于我们普通的二叉查找树&#xff0c;最坏情况下树的高度为N,确…...

字节跳动开源数字人模型latentsync1.5,性能、质量进一步优化~

项目背景 LatentSync1.5 是由 ByteDance 开发的一款先进的 AI 模型&#xff0c;专门针对视频唇同步&#xff08;lip synchronization&#xff09;任务设计&#xff0c;旨在实现音频与视频唇部动作的高质量、自然匹配。随着 AI 技术的快速发展&#xff0c;视频生成和编辑的需求…...

Pygame入门:零基础打造你的第一个游戏窗口

Pygame入门:零基础打造你的第一个游戏窗口 大家好,欢迎来到本期的技术分享!今天,我们将一起探索如何使用Python中的Pygame库来创建一个简单的游戏窗口。无论你是编程新手,还是对游戏开发感兴趣的朋友,这篇文章都将帮助你迈出第一步。让我们开始吧! 什么是Pygame? 在…...

《ATPL地面培训教材13:飞行原理》——第13章:高速飞行

翻译&#xff1a;刘远贺&#xff1b;工具&#xff1a;Cursor & Cluade 3.7&#xff1b;过程稿 第13章&#xff1a;高速飞行 目录 引言声速马赫数恒定指示空速爬升对马赫数的影响恒定马赫数下真空速随高度的变化恒定飞行高度和指示空速下温度对马赫数的影响气动流动的细分…...

【C语言练习】004. 使用各种运算符进行计算

【C语言练习】004. 使用各种运算符进行计算 004. 使用各种运算符进行计算1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 逗号运算符综合示例输出结果004. 使用各种运算符进行计算 在C语言中,运算符用于执行各种数学和逻辑运算。以下是一些常见的运算符…...

Pygame事件处理详解:键盘、鼠标与自定义事件

Pygame事件处理详解:键盘、鼠标与自定义事件 在游戏开发中,玩家的交互是至关重要的。无论是移动角色、触发动作还是暂停游戏,都需要通过各种输入来实现。Pygame作为一个功能强大的Python库,提供了丰富的API来处理这些输入,包括键盘、鼠标以及自定义事件。本文将详细介绍如…...

16. LangChain自主智能体(Autonomous Agent):模拟人类工作流的进阶设计

引言&#xff1a;当AI学会"思考"与"行动" 2025年某跨国律所的合同审查智能体&#xff0c;通过自主规划任务流&#xff0c;将平均处理时间从8小时缩短至23分钟。本文将基于LangChain的AgentExecutor与Deepseek-R1&#xff0c;揭示如何构建能自主决策、动态…...

直接映射例题及解析

目录 基本单位换算 例题一 &#x1f4c1; Tag Directory&#xff08;标签目录&#xff09; 是什么&#xff1f; 例题二 例题三 例题四 串行访问还是并行访问的选择 例题五 例题六 例题七 &#x1f535; P1&#xff1a;&#xff08;按行访问&#xff09; &#x1…...

MAVLink协议:原理、应用与实践

目录 1. 前言 2. MAVLink 协议的基本概念 2.1 协议概述 2.2 消息格式 2.3 协议版本 3. MAVLink 协议的适应场景 3.1 无人机地面站与飞行器通信 3.2 飞行器与传感器通信 3.3 无人机集群通信 3.4 飞行模拟与测试 4. 基于 Python 的 MAVLink 协议编程实践 4.1 开发环境…...

【记一次亚马逊普华永道审计流程】

1、2025年2月21日 收到审计邮件 2、2025年2月25日未及时关注注册开发者的邮箱导致一直未回复 3、2025年3月4日亚马逊警告邮件-依旧未回复 4、2025年3月13日APP正式被亚马逊开发者商店下架 停用影响: APP从官方商店下架&#xff0c;不能授权新店铺 停用原因: 由于此邮箱为注册…...

Java 异常处理全解析:从基础到自定义异常的实战指南

Java 异常处理全解析&#xff1a;从基础到自定义异常的实战指南 一、Java 异常体系&#xff1a;Error 与 Exception 的本质区别 1. 异常体系核心架构 Java把异常当作对象来处理&#xff0c;并定义一个基类java.lang.Throwable作为所有异常的超类。 在Java API中已经定义了许…...

二、UI自动化测试02--元素定位方法

目录 一、定位⼀组元素⽅法二、XPath 定位⽅法1. 路径策略1.1 路径值获取⽅法 2. 利⽤元素属性策略利⽤元素属性策略的注意事项 3. 属性和逻辑结合4. 层级和属性结合策略5. XPath 延伸⽅法 三、CSS 定位⽅法1. CSS 策略: id选择器/class选择器/元素选择器/属性选择器2. 属性选择…...

第二章 信息技术发展(2.1 信息技术及其发展)

2.1 信息技术及其发展 2.1.1 计算机软硬件 计算机硬件 (Computer Hardware) 是指计算机系统中由电 、机械和光电元件等组成 的各 种物理装置的总称计算机软件 (Computer Software) 是指计算机系统中的程序及其文档,程序是计 算任务的处理对象和处理规则的描述;文档是为了便千…...

【SwitchyOmega安装教程】

目录 一、插件安装 1. 下载安装文件 2. 打开浏览器扩展安装页面 3. 安装插件 二、界面详情 三、配置信息 3.1 设置IP 1、查看IP地址信息 2、批量测试IP是否有效 3、点击扩展程序&#xff0c;选择 Proxy SwitchyOmega 4、 点击选项进行配置 5、配置页面 一、插件安装 1…...

驱动开发硬核特训 · Day 21(上篇加强版):深入理解子系统机制与实战初探

&#x1f4c5; 日期&#xff1a;2025-04-27 &#x1f4da; 技术平台&#xff1a;嵌入式Jerry&#xff08;B站&#xff09; 1. 为什么要有子系统&#xff1f;&#xff08;深度版&#xff09; 在 Linux 内核发展早期&#xff0c;设备管理较为混乱&#xff0c;每种设备&#xff0…...

GoFly快速开发框架新增UI素材库-帮助开发者快速开发管理后台UI基于ArcoDesign框架开发

说明&#xff1a; 为开发者提供管理台的UI素材&#xff0c;社区将持续为开发开发后台系统常用UI界面&#xff0c;让开发时能有一半的界面可以直接从UI库获取&#xff0c;减少开发者自己排版界面的时间&#xff0c;帮助开发者快速开发后台业务。 使用的前端版本要求&#xff1…...

Unity-Shader详解-其二

前向渲染和延迟渲染 前向渲染和延迟渲染总的来说是我们的两种主要的渲染方式。 我们在Unity的Project Settings中的Graphic界面能够找到渲染队列的设定&#xff1a; 我们也可以在Main Camera这里进行设置&#xff1a; 那这里我们首先介绍一下两种渲染&#xff08;Forward R…...

Windows 安装 Neo4j 教程

Windows 安装 Neo4j 教程 Neo4j 是一个开源的图数据库&#xff0c;它以图形结构存储数据&#xff0c;适合用于处理高度连接的数据&#xff0c;广泛应用于社交网络、推荐系统、欺诈检测等场景。本文将为你介绍如何在 Windows 系统上安装和配置 Neo4j 数据库。 一、安装前准备 …...

Neo4j 常用查询语句

Neo4j 常用查询语句 Neo4j 是一个图数据库&#xff0c;查询语言是 Cypher&#xff0c;它类似于 SQL 但针对图形数据进行了优化。Cypher 语法直观易懂&#xff0c;适合用来处理图数据。本文将介绍一些 Neo4j 中常用的查询语句&#xff0c;帮助你快速掌握图数据的操作方法。 一…...

机器学习(10)——神经网络

文章目录 1. 神经网络基本原理1.1. 什么是神经网络1.2. 核心思想 2. 基础组件3. 前向传播&#xff08;Forward Propagation&#xff09;4. 反向传播&#xff08;Backpropagation&#xff09;5. 激活函数对比6. 网络架构类型7. 优化策略8. Python示例&#xff08;PyTorch&#x…...

Qt软件开发-摄像头检测使用软件V1.1

系列文章目录 Qt软件开发-摄像头检测使用软件V1.1 文章目录 系列文章目录前言一、V1.1增加了哪些功能&#xff1f;二、代码构成1.总体结构2. 代码内容 三、效果展示图总结 前言 之前&#xff0c;在Qt软件开发-摄像头检测使用软件&#xff1a;https://blog.csdn.net/xuming204…...

AI日报 - 2025年04月26日

&#x1f31f; 今日概览(60秒速览) ▎&#x1f916; 模型竞赛 | OpenAI与Google新模型在Arena榜单激烈角逐&#xff0c;性能指标各有千秋。 OpenAI发布o3/o4-mini等新模型&#xff0c;Gemini 2.5 Pro紧随其后&#xff0c;数学、编程能力成焦点。 ▎&#x1f4bc; 商业动向 | 并…...

ES6 Map/WeakMap/Set/WeakSet 全解指南

一、设计思想与核心概念 1. 解决传统结构的痛点 Object&#xff1a;键只能是字符串/Symbol、无序、无size属性Array&#xff1a;查找效率低(O(n))、无自动去重机制核心突破&#xff1a;// 传统方式 vs ES6方式 const obj { [{}]: value }; // 键会被转为"[object Obje…...

【Python】使用uv管理python虚拟环境

本文介绍了python虚拟环境管理工具uv&#xff0c;包括uv的作用、uv的常用命令等等。 参考&#xff1a;UV - 管理Python 版本、环境、第三方包 1. 介绍uv 官网&#xff1a;https://docs.astral.sh/uv/ uv是一个python虚拟环境管理工具&#xff0c;可以用来替代pip、pyenv、vir…...

求解,如何控制三相无刷电机?欢迎到访评论

问题&#xff1a;通过一个集成的TF2104芯片控制H桥上桥臂和下桥臂&#xff0c;如何控制&#xff1f;还是说得需要PWM_UH和PWM_UL分开控制&#xff1f;...

002 六自由度舵机机械臂——姿态解算理论

00 DH模型的核心概念 【全程干货【六轴机械臂正逆解计算及仿真示例】】 如何实现机械臂的逆解计算-机器谱-robotway DH模型是机器人运动学建模的基础方法&#xff0c;通过​​四个参数​​描述相邻关节坐标系之间的变换关系。其核心思想是将复杂的空间位姿转换分解为绕轴旋转…...

部署大模型需要多少GPU显存?以DeepSeek R1部署为例

引言 部署大型语言模型&#xff08;LLM&#xff09;时究竟需要多少GPU显存&#xff1f;本文将进行一次简单测算。 如何计算 算法1 可以用一个简单的公式来计算显存占用&#xff08;单位GB&#xff09;&#xff1a; 参数说明如下&#xff1a; 符号 含义 M 所需的 GPU 显存…...

C++?类和对象(下)!!!

一、前言 在之前我们已经讨论过了有关类和对象的前置知识以及类中的六大默认成员函数&#xff0c;在本期我们继续再讨论类和对象中剩余的友元、初始化列表等相关知识&#xff0c;如果需要再了解之前的知识的话&#xff0c;链接奉上&#xff1a;C&#xff1f;类和对象&#xff0…...

function,bind,lambda的用法

C中的std::function、std::bind与Lambda表达式详解 一、std::function std::function是C11标准引入的类模板&#xff0c;用于封装任意类型的可调用对象&#xff0c;例如函数指针、Lambda表达式、函数对象等。通过std::function可以实现不同形式可调用对象的统一存储与调用…...

Maven的聚合工程与继承

目录 一、为什么需要使用Maven工程 二、聚合工程的结构 三、聚合工程实现步骤 四、父工程统一管理版本 五、编译打包 大家好&#xff0c;我是jstart千语。想着平时开发项目似乎都是用maven来管理的&#xff0c;并且大多都是聚合工程。而且在maven的聚合工程中&#xff0c…...

‌C/C++对时间的处理

1. 两种数据结构 time_t‌ 是一个在C和C++编程语言中用于表示时间的类型。time_t类型通常是一个长整型(long int)或整数类型,用于表示从特定参考点(通常是1970年1月1日00:00:00 UTC)经过的秒数。 time_t定义在<ctime>头文件中,通常用于记录时间戳,比如获取当前时间…...

Spring Boot 支持政策

&#x1f9d1;&#x1f4bb; Spring Boot 支持政策 ✒️ Andy Wilkinson 于2023年12月7日编辑本页 32次修订 &#x1f4cc; 核心政策 &#x1f6e1;️ VMware Tanzu 开源支持政策 Spring Boot 针对关键错误和安全问题提供支持 &#x1f4c6; 版本支持周期 1️⃣ 主要版本&a…...

实验四 进程调度实验

一、实验目的 1、了解操作系统CPU管理的主要内容。 2、加深理解操作系统管理控制进程的数据结构--PCB。 3、掌握几种常见的CPU调度算法&#xff08;FCFS、SJF、HRRF、RR&#xff09;的基本思想和实现过程。 4、用C语言模拟实现CPU调度算法。 5、掌握CPU调度算法性能评价指…...

静态多态和动态多态的区别

C多态机制深度解析 多态是面向对象编程的核心特性&#xff0c;允许通过统一接口执行不同实现。在C中&#xff0c;多态表现为基类指针或引用调用虚函数时&#xff0c;根据实际对象类型执行对应派生类的函数逻辑。 基础实现示例 定义基类与派生类&#xff0c;演示动态绑定…...

现代化Android开发:Compose提示信息的最佳封装方案

在 Android 开发中&#xff0c;良好的用户反馈机制至关重要。Jetpack Compose 提供了现代化的 UI 构建方式&#xff0c;但提示信息(Toast/Snackbar)的管理往往显得分散。本文将介绍如何优雅地封装提示信息&#xff0c;提升代码可维护性。 一、基础封装方案 1. 简单 Snackbar …...

Android学习总结之Retrofit篇

1. 注解原理概述 在 Java 里&#xff0c;注解是一种元数据&#xff0c;它为代码提供额外信息但不影响程序的实际逻辑。注解可以在类、方法、字段等元素上使用&#xff0c;并且能在编译时、运行时通过反射机制被读取。Retrofit 充分利用了 Java 注解机制&#xff0c;通过自定义…...

Python 第 12、13 节课 - 元组和列表

- 第 94 篇 - Date: 2025 - 04 - 26 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 Python 第 12、13 节课 - 元组和列表 上课时间: 2025-04-21&#xff08;12&#xff09; 2025-04-24&#xff08;13&#xff09; 文章目录 Python 第 12、13 节课 - 元组和列表一 元组1 元组的…...

新特性版本升级指引

✨ 升级到新特性版本时的配置迁移 1️⃣ &#x1f527; 配置迁移工具说明 当您将应用升级到新特性版本时&#xff0c;可能需要处理部分配置属性的重命名或移除问题。 2️⃣ &#x1f680; 启用方法 Spring Boot 提供了环境分析工具&#xff1a; 应用启动时打印诊断信息运行时…...

6.1 客户服务:智能客服与自动化支持系统的构建

随着企业数字化转型的加速&#xff0c;客户服务作为企业与用户交互的核心环节&#xff0c;正经历从传统人工服务向智能化、自动化服务的深刻变革。基于大语言模型&#xff08;LLM&#xff09;和智能代理&#xff08;Agent&#xff09;的技术为构建智能客服与自动化支持系统提供…...

从新手到高手:小程序开发进阶技巧分享

小程序开发从入门到精通需要经历技术积累、架构优化和工程化实践等多个阶段。以下是结合真实项目经验的进阶路线与核心技术要点&#xff0c;涵盖性能优化、架构设计、跨平台开发等关键领域&#xff1a; 一、性能调优实战技巧 1. 首屏渲染加速方案 // 预请求关键数据&#xff…...

S参数的含义

S参数的含义&#xff1a; 在低速设计时代&#xff0c;工程界普遍使用等效集总电路模型来描述互连通道的过孔、连接器等各部分。对于上升时间达到几个ns的低速数字信号&#xff0c;甚至可以使用一个0Ω电阻代替连接器&#xff0c;分析的结果也不会和实际情况有太大的差别。但是当…...

职场十二法则-马方

马方老师的《职场十二法则》,献给初入职场工作中迷茫的自己。 1.挣钱是能力的副产品&#xff0c;能力比挣钱重要&#xff0c;让自己值钱比有钱更重要。成长比赚钱重要&#xff0c;年轻时把成长放第一位&#xff0c;挣钱放第二位&#xff0c;通过提升能力实现长期收益。 2.成长…...