vs单步调试及断点调试基本介绍(入门版详细图文介绍)

vs单步调试及断点调试基本介绍(入门版详细图文介绍)简述:本文面向小萌新简单描述visualstudio2019下的基本调试技巧1:打断点,在侧栏点击一下,即可生成断点功能:在调试时可以运行到这一步之后停止如图2:进而可以单步调试,快捷键f11//注,电脑快捷键分软件和系统层快捷键//本人戴尔G3是通过Ese+fn键切换,不同电脑可能不一样注意窗口i的值,进入第一次for循环,i赋值为0之后,进入printf,然后返回f…

大家好,又见面了,我是你们的朋友全栈君。

简述:本文面向小萌新简单描述visual studio2022下的基本调试技巧(其他主流IDE均相似,仅具体快捷键键位不同

//本文无废话,建议小萌新仔细阅读
//
//本文无废话,建议小萌新仔细阅读
//
//本文无废话,建议小萌新仔细阅读
//

//注,用win10系统初学c/c++的话建议直接安装vs,省心,初学没必要为难自己
vs2022安装教程https://blog.csdn.net/qq_43444947/article/details/104476963

//
//

1: 断点调试

//作用:可以用来快速定位问题在哪一块,如:正常运行到断点位置后停住,通过窗口输出情况可以判断运行到断点之前的部分是否符合预期
//
//
用法:打断点,在侧栏点击一下,即可生成断点就是那个红色的点
在这里插入图片描述

//
断点的作用: 在调试启动时可以运行到这一步之后停止,
//
使用方法:调试->开始调试
//
在这里插入图片描述

//
//
//
断点停住后
1:可配合单步调试一步步的运行(见后文介绍)
2:也可以恢复运行状态,继续运行程序直到等待输入,异常或者运行到下一个断点
//
//
//
在这里插入图片描述

//
如上图
停止在断点行
解释:此时有两个断点,停在第一个断点处,前面的运行完,输出hello
//
下方窗口显示局部变量i的值是468因为此时停在断点,还没有进入for语句的初始化i为0,所以此时i的值是内存中的值
//
//
而输出框中正常打印的hello代表从程序开始运行到第一个断点的这部分都一切正常—–按预期输出了hello
//
//
而输出框中正常打印的hello代表从程序开始运行到第一个断点的这部分都一切正常—–按预期输出了hello
//
//
而输出框中正常打印的hello代表从程序开始运行到第一个断点的这部分都一切正常—–按预期输出了hello
//
//
(实际中你可以通过多个关键地方打印信息,结合断点来快速定位问题)
//
//
在断点停住的情况下,可以接单步调试(见后面介绍),也可以恢复运行状态(使用方法,vs中是快捷键按f5
//
//
//vs中的位置——调试->继续,别的IDE也是类似,可能在侧边栏
//此处选择继续运行

在这里插入图片描述

//
//
此时,按完f5(vs中是点击继续)(别的IDE找到类似的选项之类),继续执行(或者叫“恢复程序运行状态”)后如图
在这里插入图片描述

上图解释:
调试启动后停在第一个断点后,程序停止在那一步此处选择继续运行,恢复运行状态此时一切顺利(没有异常等情况,一切顺利运行),直接运行至下一个断点,查看窗口输出
//
//
此时,按照预期输出了hello和3 6 9,然后停在第二个断点
//
//
//意义:此时可以确定程序从第一个断点一直运行到第二个断点都完全符合预期(预期:输出hello和3 6 9)
//
//意义:此时可以确定程序从第一个断点一直运行到第二个断点都完全符合预期(预期:输出hello和3 6 9)
//
//意义:此时可以确定程序从第一个断点一直运行到第二个断点都完全符合预期(预期:输出hello和3 6 9)
//
//
//在实际项目开发中,会调用大量其他模块/底层api。此时可以通过关键地方设置多个断点,然后逐步恢复运行状态来判断哪个模块出现问题。而单步调试可用来在对应范围内去找具体的bug
//
//
//

2:** 单步调试**:

//作用:可以深入某一个模块,某一个函数去一行行执行代码,可以具体的去定位bug在哪一行。

//使用方法:
快捷键f11,(别的IDE也类似),单步调试可以直接按f11,然后从第一行开始逐步运行
//
//
不过通常用法是在断点调试下接单步。即直接运行到断点那行,再停下来一步一步运行,进而可以仔细检查每一行是否符合预期,
//
//在这里插入图片描述

//如上图,此时是调试启动后,一切顺利的运行到第一个断点后,假设第一个断点到第二个断点中有bug,此时使用单步调试去具体定位bug在哪一行,此时仔细观察这部分代码每一行的运行过程
//
//
//上图按了一次f11(别的软件类似)(逐语句运行),此时,运行一行运行for(int i=0;i<3;i++)i初始化为0,值从之前的468变为0
//
//注,下面的窗口也能显示变量的内存地址相关信息,也可以用来定位内存相关的问题
//
在这里插入图片描述
//如上图,此时按下第二次f11(逐语句运行,别的IDE类似),此时观察监控窗口
//此时执行完num+=3;
//
//num的值变为3;(符合预期,借助这种方式来定位bug具体在哪行
//
//
//注:电脑快捷键分软件和系统层快捷键
//本人戴尔G3是通过Esc+fn键切换,不同电脑可能不一样,如果按对应快捷键无效,考虑是否需要切换为软件层面
//
//
//
另,f10是逐过程调试,不会进入函数块(本文就不测了,自己写个函数调用实践一下)f11逐语句,会进入函数块内部去调试
//
//
//再次强调,单步调试可以检查每一步是否符合预期比如for循环是否越界,赋值是否正确等,内存分配问题,底层调用是否正确赋值,中间结果是否符合预期,等等各种问题

//
//

补充:如果不小心关闭输出窗口,可以在此处点开即可
//
//注,需要在调试状态(即本身处于断点停住的调试,或者单步状态下)点开 调试->窗口->需要的窗口
在这里插入图片描述
//
//
//
总的来说,断点调试用来在整个程序中定位问题属于哪一个模块,而单步调试用来定位问题具体在哪一行
//
//

3:** 调试的意义**:

调试的意义在于检测每一行,每一个函数,每一个模块是否符合自己预期来执行。
//
// 其中断点调试通常通过恢复运行状态(继续执行)快速定位bug在哪一个大的模块
//
// 而单步调试一般是在断点调试的状态下,去具体的定位哪一行代码有bug
//
//更多的调试技巧,如调试条件设置,断点设置,堆栈分析,快照分析等,都需要自己去钻研,本文只是初步介绍一下,万事开头难,祝大家一切顺利

//
//
//
//
//有用的话可以点个赞表示对我的支持鼓励,谢谢大家
//
//有用的话可以点个赞表示对我的支持鼓励,谢谢大家
//
//有用的话可以点个赞表示对我的支持鼓励,谢谢大家
//
//注,后续有问题可以在评论区留言,看到后会更新文章。
//
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143188.html原文链接:https://javaforall.net

(2)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Socker通信

    Socker通信1.服务器端程序TCP/IP服务器端应用程序是通过Java语言中提供的ServerSocket和Socket这两个有关网络的类来实现的。而ServerSocket类除了建立一个Server之外,还通过accept()方法提供了随时监听客户端连接请求的功能,它的构造方法有以下两种。ServerSocket(intport)ServerSocket(intpor

    2025年7月27日
    4
  • 如何学习verilog,如何快速入门?

    前言害怕真的有人不知道verilog是什么东西,于是就给把百度给搬来了!VerilogHDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。VerilogHDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由GatewayDesignAutomation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。之前的文章《IC前端

    2022年4月7日
    61
  • saga分布式事务_分布式事务原理

    saga分布式事务_分布式事务原理saga是分布式事务领域里一个非常重要的事务模式,特别适合解决出行订票这类的长事务,本文将深度剖析saga事务的设计原理,以及在解决订票问题上的最佳实践01.saga的理论来源saga这种事务模式最早来自这篇论文:sagas在这篇论文里,作者提出了将一个长事务,分拆成多个子事务,每个子事务有正向操作Ti,反向补偿操作Ci。假如所有的子事务Ti依次成功完成,全局事务完成假如子事务Ti失败,那么会调用Ci,Ci-1,Ci-2….进行补偿论文阐述了上述这部分基本的saga逻辑之后

    2025年11月21日
    4
  • VC++ CopyFile函数使用方法

    VC++ CopyFile函数使用方法

    2021年11月15日
    63
  • springboot quartz 动态添加任务(quartz分布式定时任务)

    看了好多文章,都只讲了基础的demo用法,也就是简单的创建运行定时任务,对定时任务的管理却很少。我这里从0开始搭建一个简单的demo,包括定时任务的各种操作,以及API的一些用法,可以实现大多场景的需求。如:普通定时任务的创建、启动、停止。 动态创建定时任务,如创建一个订单,5分钟后执行某某操作。一、整个Quartz的代码流程基本基本如下:首先需要创建我们的任务(Job),比如取消订单、定时发送短信邮件之类的,这是我们的任务主体,也是写业务逻辑的地方。 创建任务调度器(Schedul..

    2022年4月17日
    43
  • 通用数据库连接程序

    通用数据库连接程序

    2021年8月7日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号