【C语言】6.C语言VS实用调试技巧(1)

文章目录

  • 1.什么是 bug
  • 2.什么是调试(debug)?
  • 3.Debug 和 Release
  • 4.VS调试快捷键
    • 4.1 环境准备
    • 4.2 调试快捷键
  • 5.监视和内存观察
    • 5.1 监视
    • 5.2 内存


1.什么是 bug

bug现在一般是指在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题,简称程序漏洞。


2.什么是调试(debug)?

当我们发现程序中存在的问题的时候,那下一步就是找到问题,并修复问题。

这个找问题的过程叫称为调试,英文叫debug。调试一个程序,首先是承认出现了问题,然后通过各种手段去定位问题的位置,可能是逐过程的调试,也可能是隔离和屏蔽代码的方式,找到问题所的位置,然后确定错误产生的原因,再修复代码,重新测试。


3.Debug 和 Release

在这里插入图片描述

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序;程序员在写代码的时候,需要经常性的调试代码,就将这里设置为 debug,这样编译产生的是debug 版本的可执行程序,其中包含调试信息,是可以直接调试的。

Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。当程序员写完代码,测试再对程序进行测试,直到程序的质量符合交付给用户使用的标准,这个时候就会设置为 release ,编译产生的就是 release 版本的可执行程序,这个版本是用户使用的,无需包含调试信息等。 公司的测试人员也是测试这个Release版本。

在这里插入图片描述在这里插入图片描述
Debug 版本Release版本

对比可以看到从同一段代码,编译生成的可执行文件的大小,release版本明显要小,而debug版本明显大。


4.VS调试快捷键

4.1 环境准备

我们需要一个支持调试的开发环境,使用VS的时候应该把VS上设置为Debug。

在这里插入图片描述


4.2 调试快捷键

调试最常使用的几个快捷键:

  1. F9:创建断点和取消断点。断点的作用是可以在程序的任意位置设置断点,打上断点就可以使得程序执行到想要的位置暂停执行,接下来我们就可以使用F10,F11这些快捷键,观察代码的执行细节。

  2. 条件断点:满足这个条件,才触发断点

在这里插入图片描述

鼠标右击断点,点击条件

在这里插入图片描述

可以设置条件。

然后打开监视窗口:

在这里插入图片描述

直接跳到满足条件的地方了,这就是条件断点。

  1. F5:启动调试,经常用来直接跳到下一个断点处(这个断点指的是运行逻辑上的断点,而不是物理上的断点),一般是和F9配合使用。

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

  3. F11:逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部。在函数调用的地方,想进入函数观察细节,必须使用F11,如果使用F10,直接完成函数调用。

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

VS更多快捷键了解:http://blog.csdn.net/mrlisky/article/details/72622009


5.监视和内存观察

5.1 监视

调试的时候可以通过监视功能来查看自己的内部数据。

在这里插入图片描述

在这里插入图片描述


5.2 内存

如果监视窗口看的不够仔细,也是可以观察变量在内存中的存储情况。

在这里插入图片描述

输入arr

在这里插入图片描述

回车

在这里插入图片描述

这个就是arr在内存中的地址。

我们还可以更改列数,使得我们方便查看。因为1个16进制位对应4个二进制位,2个十六进制位对应一个字节。所以我们把这个改成4就可以4字节4字节的看了。

int类型刚好4个字节。

在这里插入图片描述

在这里插入图片描述

中间那一堆就是内存中的值,以16进制存在。

随着我们程序的进行,内存里的这些值也会发生变化。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git使用(3):版本管理

一、查看历史 编写一个java类进行测试 选择Git -> Show Git Log查看日志。 第一次修改推送到远程仓库了,所以有origin(远程仓库地址),第二次修改只提交到本地仓库所以没有。 二、版本回退 1、本地回退 在要回退的版本上右键&a…

XLSX文件删除了怎么找回?8个恢复方法,太实用了!

U盘作为一种便携的存储设备,随之而来的数据丢失问题也让人头疼。尤其是当U盘中的XLSX文件(Excel 2007及以后版本的默认文件格式)被误删除或丢失时,如何高效找回这些数据成为了许多人关注的焦点。 本文将从XLSX文件的特性、U盘格式…

C++set关联式容器

Cset 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而map、set是一种关联式容器,关联式容器也是用来存储数据的&#xff0…

深度盘点在当今经济形势下资深项目经理或PMO的或去或从

在当今经济形势下,资深项目经理(Project Manager)或项目管理办公室(PMO)的去向和选择受到多种因素的影响。以下是对他们可能面临的或去或从的深度盘点: 1、发展去向 1. 深化专业领域:在经济形势…

Linux程序开发(一):Linux基础入门安装和实操手册

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

CSAP_MAT_BOM_MAINTAIN 返回消息处理

CSAP_MAT_BOM_MAINTAIN是创建修改BOM的函数,但这个函数的返回参数中没有消息返回。 需要在调用前使用函数: CALL FUNCTION CALO_INIT_APIEXPORTINGdata_reset_sign EXCEPTIONSlog_object_not_found 1log_sub_object_not_found 2other_e…

QT笔记 - QPainter 填充环形区域(甜甜圈)

以矩形为例: QPainter painter(this);// painter.setPen(Qt::blue);// painter.setFont(QFont("Arial",30));// painter.drawText(rect(),Qt::AlignCenter,"Hello Qt!!!");QRect rect QRect(50, 50, 400, 400);QRect box QRect(100, 100, 105…

TS-抽象类和静态成员

目录 1,抽象类1,为什么需要抽象类2,抽象成员3,设计模式-模板模式 2,静态成员1,什么是静态成员2,设计模式-单例模式 1,抽象类 1,为什么需要抽象类 有时,某个…

Java面试八股之Java中有哪些原子类,原理是什么

Java中有哪些原子类,原理是什么 AtomicInteger 和 AtomicLong: 用于对整数(int)和长整数(long)进行原子操作。 原理:它们内部封装了一个整型或长整型变量,并通过使用Unsafe类提供…

HarmonyOS - 记一次HSP异常堆栈无法定位问题

问题背景 HSP混淆打包之后无法定位异常堆栈,问题堆栈为: MyModules/build/default/cache/default/defaultCompileArkTS/esmodule/release/MyModules/src/main/ets/d/r.ts:1:1 问题原因: 导致无法定位问题的原因是,混淆时开启了代码…

OpenHarmony 实战开发——ArkUI容器类API介绍

容器类,顾名思义就是存储的类,用于存储各种数据类型的元素,并具备一系列处理数据元素的方法。在 ArkUI 开发框架中,容器类采用了类似静态的语言来实现,并通过 NAPI 框架对外提供。通过对存储位置以及属性的限制&#x…

关于数据结构B+TREE 和 HASH的整理

一、BTREE BTree是一种树数据结构,是B-Tree的变种,属于n叉排序树,每个节点通常有多个孩子。 BTree是和B-Tree相比,BTree的所有的数据都会出现在叶子节点上,并且叶子节点会形成一个单向链表,非叶子节点仅仅…

C++map容器关联式容器

Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而map、set是一种关联式容器,关联式容器也是用来存储数据的&#xff0…

日期问题,

日期问题 ac代码 #include <cstdio> #include <iostream>using namespace std;int days[13] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool check_valid(int year, int month, int day) {if (month 0 || month > 12) return false;if (day 0) …

【开发】模型部署笔记

目录 模型量化 模型量化 1、模型量化优点 低精度模型表示模型权重数值格式为FP16&#xff08;半精度浮点&#xff09;或者INT8&#xff08;8位定点整数&#xff09;&#xff0c;但是目前低精度往往就指代INT8。常规精度模型则一般表示模型权重数值格式为FP32&#xff08;32位…

求数组最大值

#include <bits/stdc.h> using namespace std; int main(){int a[4]{1,2,3,4};cout<<*max_element(a,a4);return 0; }

策略模式详解

策略模式 1 概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#xff0c;当然可以进行代码开发的工具有很多&#xff0c;可以选择Idea进…

JavaScript的跳转传参方式

在JavaScript中&#xff0c;页面跳转并传递参数通常可以通过几种不同的方式来实现。下面是一些常见的方法&#xff1a; 1.URL参数&#xff08;Query String&#xff09; 这是最常见的方式&#xff0c;通过在URL的末尾添加参数来实现。例如&#xff1a; javascriptwindow.loc…

gitlab webhook触发jenkins任务

配置jenkins 安装gitlab插件 配置jenkins job 选择gitlab webhook触发 在高级中生成token 代码仓设置 新增webhook 配置webhook 测试连接 缺点&#xff0c;不能带gitLab事件的参数&#xff01;&#xff01;&#xff01;