VS实用调试技巧(程序员的必备技能)

news/2024/9/17 19:01:25/ 标签: 算法, c语言

调试的重要性

在我们写代码的时候,如果程序出现了bug,那么下一步就是找到bug并修复bug!而这个找问题的过程就被称为调试(英文叫debug,消灭bug的意思)。

调试能观察到程序内部执行的细节,可以增加程序员对代码的理解和掌控,也能更高效的解决程序中存在的bug,提高写代码的能力!

调试的环境

在VS上编写程序的时候有两个版本,一个是Release、另一个是Debug

Debug称为调试版本,这个版本包含调试信息,并且不做任何优化,是程序员在调试程序时候用到的版本!

Release称为发布版本,这个版本是用户直接使用的,往往进行了各种优化,使得程序在代码大小和运行速度上都是最优的,而且不包含调试信息(不能调试)!

调试常用到的快捷键

F9:创建断点和取消断点

也可以在上图所指的地方单击鼠标左键创建和取消!

断点的作用:

断点可以在程序的任意位置进行设置,打上断点就可以使得程序执行到断点处暂停执行,可用于与其他的一些快捷键配合使用,便于观察。

条件断点:只有在程序执行过程中满足这个条件才触发断点,在断点处单击鼠标右键,然后点条件就可以设置想要的条件进行观察了!

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

这里说的下一个断点不是指物理意义上的下一个断点,而指的是程序执行逻辑上的下一个断点!

F10:逐过程调试,可以是一条语句,也可以是一次函数调用

按F10调试时不能进入函数的内部观察细节!

F11:逐语句调试

按F11可以使我们在调试时让程序的执行逻辑进入函数内部,便于更好的观察细节!

Ctrl+F5:开始执行不调试

可以让程序直接运行起来

监视

当开始调试之后,在菜单栏中选择【调试】->【窗口】->【监视】,然后任意打开一个就可以观察程序运行时候的一些变量或者表达式了!

例如要观察下面这个代码中变量的值

内存

内存可以观察变量在内存中的存储情况。也是在开始调试之后,在菜单栏中选择【调试】->【窗口】->【内存】,然后任意打开一个

在内存中观察数据要在地址栏处输入地址才能在该地址处观察数据

举例

假如要调试下面这个代码

#include <stdio.h>
int add(int x, int y)
{int r = 0;r = x + y;return r;
}
int main()
{int a = 10;int b = 70;//写一个函数计算两个整数的和int ret = add(a, b);return 0;
}

调用add函数之前:先按F10开始调试

调用add函数:在代码执行到16行时,按F11进入函数内部,按F10执行下一条语句

调用完add函数之后变量ret的值:

常见的错误归类

编译型错误:一般是语法错误

链接型错误:比如拼写错误、头文件没包含等等

运行时错误:需要借助调试才能逐步定位问题所在,进而解决问题


http://www.ppmy.cn/news/1507266.html

相关文章

java 解析 PDF OFD 发票 部分文字缺失

1、pdfbox https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox 到这里用最新的版本 最近碰到发票各式各样&#xff0c;千奇百怪&#xff1a;记录其中一个 解析出来是&#xff1a;缺少一个通字 发票好几处都缺少文字&#xff0c;解析出来的是 一个 圆点 原因&…

Java和kotlin 反射机制

Java 反射机制详解 Java 反射机制是一种强大的工具&#xff0c;使得程序可以在运行时动态地获取类的信息&#xff0c;并且可以在运行时操作类的成员变量、方法和构造函数等。以下是 Java 反射的详细讲解&#xff0c;包括其原理、使用场景、优缺点以及如何使用反射。 1. 反射的…

基于光学动捕定位下的Unity-VR手柄交互

Unity VR 场景手柄交互实现方案 需求 在已创建好的 Unity VR 场景中&#xff0c;接入游戏手柄&#xff0c;通过结合动捕系统与 VRPN&#xff0c;建立刚体&#xff0c;实时系统获取到手柄的定位数据与按键数据&#xff0c;通过编写代码实现手柄的交互逻辑&#xff0c;实现手柄…

C#实现代理服务器

在C#中实现一个简单的代理服务器&#xff0c;可以使用System.Net.Sockets命名空间下的TcpListener类来监听客户端的连接请求&#xff0c;并使用TcpClient来处理与客户端的通信。以下是一个简单的代理服务器示例&#xff1a; using System; using System.IO; using System.Net;…

MySQL:表的设计原则和聚合函数

所属专栏&#xff1a;MySQL学习 &#x1f48e;1. 表的设计原则 1. 从需求中找到类&#xff0c;类对应到数据库中的实体&#xff0c;实体在数据库中表现为一张一张的表&#xff0c;类中的属性对应着表中的字段 2. 确定类与类的对应关系 3. 使用SQL去创建具体的表 范式&#xff1…

【微信小程序开发】——奶茶点餐小程序的制作(二)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【MySQL】1.MySQL基本操作

目录 一、MySQL数据库登陆 1、设置环境变量 2、cmd命令登陆数据库 二、基本操作语法 1、显示数据库——SHOW 2、使用/选择数据库——USE 3、删除——DROP 4、创建——CREATE 5、查看表结构——DESC 6、数据操作——增删改查 &#xff08;1&#xff09;增/插入&#…

03创建型设计模式——抽象工厂模式

一、抽象工厂模式简介 抽象工厂模式是所有形态的工厂模式中最为抽象和具有一般性的。抽象工厂模式可以向客户端提供一个接口&#xff0c;使得客户端在不必指定产品的具体类型的情况下&#xff0c;能够创建多个产品族的产品对象。例如现实生活中&#xff0c;水果的种类繁多&…

Python:协程 - 快速创建三步骤

asyncio 协程快速创建三步骤&#xff1a; 1、编写协程函数。 2、创建协程对象。 3、加入事件循环。 import asyncioasync def do_somethings():# 1、定义协程函数print(1)await asyncio.sleep(0.5)async def do_another():print(2)await asyncio.sleep(0.2)async def do_other…

haproxy七层代理

目录 一、haproxy简介 二、haproxy实验 1.环境部署 2.haproxy的基本部署方法及负载均衡的实现 2.1安装软件 2.2haproxy的基本配置 3.haproxy的全局配置参数及日志分离 3.1多线程设定 3.2自定义日志 4.haproxy-proxies中的常用配置参数 4.1设置backup --- sorryserver…

TCP如何建立长连接

文章目录 TCP建立长连接长连接和短连接长连接的优势TCP KEEPALIVE 心跳包心跳检测步骤 断线重连断线重连函数实现 实例服务端客户端程序功能演示效果 TCP建立长连接 长连接和短连接 长连接是指不论TCP的客户端和服务器之间是否有数据传输&#xff0c;都保持建立的TCP连接&…

CSS优先级,没你想的那么简单!全面介绍影响CSS优先级的各类因素

简介 CSS的中文名称叫做“层叠样式表”&#xff0c;其中的层叠就是指根据各类优先级规则来处理冲突的样式。层叠是CSS的一个重要特性&#xff0c;优先级也是CSS学习中一项非常重要的内容。 提到CSS优先级&#xff0c;我们首先会想到各类的选择器&#xff0c;例如ID选择器&…

学习记录——day28 信号量集

目录 一、信号量集 1、信号量集的API函数接口 二、 将信号量集函数再次封装 1、sem.h 2、sem.c 三、使用信号量集完成共享内存的进程同步 1、发送端 2、接收端 一、信号量集 信号量集&#xff0c;其实就是无名信号量的集合&#xff0c;主要用于完整多个进程间的同步问题.…

127. Go反射基本原理

文章目录 反射基础 - go 的 interface 是怎么存储的&#xff1f;iface 和 eface 的结构体定义&#xff08;runtime/iface.go&#xff09;&#xff1a;_type 是什么&#xff1f;itab 是什么&#xff1f; 反射对象 - reflect.Type 和 reflect.Value反射三大定律Elem 方法reflect.…

【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)

文章目录 2.链队列2.1初始化&#xff08;带头结点&#xff09;不带头结点 2.2入队&#xff08;带头结点&#xff09;2.3出队&#xff08;带头结点&#xff09;❗2.4链队列c实例 3.双端队列考点:输出序列合法性栈双端队列 队列的应用1.树的层次遍历2.图的广度优先遍历3.操作系统…

【Kubernetes】Service 概念与实战

Service 概念与实战 1.通过 Service 向外部暴露 Pod2.Service 的多端口设置3.集群内部的 DNS 服务4.无头 Service 在 Kubernetes 中部署的应用可能对应一个或者多个 Pod&#xff0c;而每个 Pod 又具有独立的 IP 地址。Service&#xff08;服务&#xff09;能够为一组功能相同的…

大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Linux中安装MYSQL数据库

文章目录 一、MYSQL数据库介绍1.1、MySQL数据库的基本概述1.2、MySQL数据库的主要特性1.3、MySQL数据库的技术架构与组件1.4、MySQL数据库的应用与扩展性1.5、MySQL数据库的许可模式与开源生态 二、MySQL Workbench和phpMyAdmin介绍2.1、MySQL Workbench介绍2.2、phpMyAdmin介绍…

【学习笔记】Day 9

一、进度概述 1、inversionnet_train 试运行——成功 二、详情 1、inversionnet_train 试运行 在经历了昨天的事故后&#xff0c;今天最终成功运行了 inversionnet_train&#xff0c;运行结果如下&#xff1a; 经观察&#xff0c;最开始 loss 值大概为 0.5 左右 随着训练量的增…

使用Selenium调试Edge浏览器的常见问题与解决方案

背景介绍 在当今互联网时代&#xff0c;网页爬虫已经成为数据获取的重要手段。而Selenium作为一款功能强大的自动化测试工具&#xff0c;被广泛应用于网页爬取任务中。虽然Chrome浏览器是Selenium用户的常见选择&#xff0c;但在某些工作环境中&#xff0c;我们可能需要使用Ed…