【C++】Visual Studio调试C++代码的13个技巧

这篇具有很好参考价值的文章主要介绍了【C++】Visual Studio调试C++代码的13个技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 文章来源地址https://www.toymoban.com/news/detail-423202.html

目录

前言

正文

一、打断点

二、逐语句执行和跳出执行

三、逐过程执行

三、运行到光标处

四、多次执行代码

五、快速监视

六、监视窗口

八、内存查看

九、局部变量

十、调用堆栈

十一、assert的使用

十二、条件断点

十三、函数断点


前言

  • 本文使用的是Visual Studio 2022社区版,但在老版本上依然适用(例如2019版)。
  • 本文旨在简单介绍一些调试的小技巧,进阶的调试技巧以后再做总结。
  • 本文基于Windows平台

正文

一、打断点

启用调试,第一步需要打断点:

【C++】Visual Studio调试C++代码的13个技巧

注意:启动调试后,程序会执行到第一个断点出暂停,这里的第一个断点指的不是位置上的第一个(即代码行最靠前的那一个),而是逻辑上的第一个。例如上图,第24行的断点是最先执行的那一个。

二、逐语句执行和跳出执行

逐语句执行也叫“单步执行”或“逐行执行”,如果调用了一个函数,那么会进入这个函数中,而不是跳过函数。 

【C++】Visual Studio调试C++代码的13个技巧

注意:这里的“逐行”,不是物理意义上的每一行,而是逻辑上的一行代码

例如,上面第24行,判断条件里调用了2个函数,那么,会首先进入add()函数,返回后再进入sub()函数。

        注意:C++编译器对条件判断有一个优化,对于24行,如果add()为false,那就不会继续执行sub()了,如果add()为true,才会继续进入sub()函数。

跳出执行的用处是,如果进入函数后,不再希望用单步执行走完函数体内剩余的代码,那么可以跳出执行,直接返回:

【C++】Visual Studio调试C++代码的13个技巧

 

三、逐过程执行

【C++】Visual Studio调试C++代码的13个技巧

特点:无论当前代码行有多少个函数调用,都不会进入到函数中,而是直接进入到下一行代码并暂停。

三、运行到光标处

在没启动调试的时候,直接在想要定位的代码行处右键,选择运行到光标处,那么就会自动设置一个一次性断点,开始调试:

【C++】Visual Studio调试C++代码的13个技巧

 【C++】Visual Studio调试C++代码的13个技巧

 注意:一次性断点的优先级是低于其它断点的,如果调试之前在某个位置打了断点A,并且这个断点在一次性断点之前(逻辑上),那么启用调试后,会首先来到断点A处。

四、多次执行代码

如果有些地方没弄清楚,那么可以在不重新打开调试的情况下,多次执行某些代码。

例如:

【C++】Visual Studio调试C++代码的13个技巧

断点打在10行,执行完10行后,来到11行,但如果我还想再执行一次第10行,那就是“多次执行代码”了,方法很简单,就是:用鼠标把那个黄色箭头拖到第10行:

【C++】Visual Studio调试C++代码的13个技巧

连续执行2次第10行: 

 【C++】Visual Studio调试C++代码的13个技巧

 

五、快速监视

在调试过程中,如果想要快速查看某个对象的信息,那么快速监视就挺有用,同时,还可以修改这个对象的值。

方法是:选中某个变量,右键:

【C++】Visual Studio调试C++代码的13个技巧

 【C++】Visual Studio调试C++代码的13个技巧

 

六、监视窗口

调试的时候,如果要查看的变量很多,就需要用监视窗口,同时,可以打开多个监视窗口:

【C++】Visual Studio调试C++代码的13个技巧

注1:和快速监视一样,监视窗口也能修改变量的值。只不过对于string这类较为复杂的类型来说,修改就相对麻烦,不能一次性修改,而是找到每个字符对应的位置,再修改:

【C++】Visual Studio调试C++代码的13个技巧

注2:也可以监视一些表达式(有些不行,例如构造、析构、类型转换、预处理器宏等):

【C++】Visual Studio调试C++代码的13个技巧

 

八、内存查看

目前还没有从内存层面去找bug,所以就举个查看内存的例子。

首先,启用调试,然后打开内存窗口:

【C++】Visual Studio调试C++代码的13个技巧

默认窗口没有什么内容,只有一些随机的值:

【C++】Visual Studio调试C++代码的13个技巧

当需要查看某个变量的内存占用时,只需要把这个变量拖到内存窗口:

【C++】Visual Studio调试C++代码的13个技巧

同理,把wa也拖上去,对比a和wa的内存占用情况,可以看到wa是宽字符,每个字符占2个字节:(最后有一个结束符,也需要占一个字符大小的内存空间)

【C++】Visual Studio调试C++代码的13个技巧

 【C++】Visual Studio调试C++代码的13个技巧

 

九、局部变量

  • 用来查看当前作用域下的变量:

test()里的p:  

【C++】Visual Studio调试C++代码的13个技巧

 【C++】Visual Studio调试C++代码的13个技巧

 test0()里的p:  

 【C++】Visual Studio调试C++代码的13个技巧

 【C++】Visual Studio调试C++代码的13个技巧

  •  变量太多时,可以筛选想要显示的变量:

【C++】Visual Studio调试C++代码的13个技巧

【C++】Visual Studio调试C++代码的13个技巧 

 【C++】Visual Studio调试C++代码的13个技巧

 

十、调用堆栈

可以查看函数的调用情况,每一个函数调用叫做“帧”,也称为“栈帧”;

栈底的函数最先被调用,栈顶的函数最后被调用:

【C++】Visual Studio调试C++代码的13个技巧

 

十一、assert的使用

首先看一个很熟悉的窗口:

【C++】Visual Studio调试C++代码的13个技巧

 这个实际上就是通过assert产生的,如果出现,不要点“中止”,而是点“重试”,这样就能找到代码出错的地方:

【C++】Visual Studio调试C++代码的13个技巧

注意:

  1. 要导入头文件 #include <assert.h>
  2.  不要在assert里使用函数调用、对变量赋值!

关于第2点,《C++ Primer》第216页讲到,如果源文件定义了NDEBUG宏,那么assert就会失效,从而assert里的函数调用和赋值等操作都会被忽略,导致后面的错误!下面举例:

如果没有定义NDEBUG宏,那么assert是生效的,因此add函数会把相加的结果赋值给c:

#include <assert.h>
int add(int a, int b)
{
	return a + b;
}
void test()
{
	int a = 10, b = 10;
	int c = 0;
	assert((c = add(a, b)) == 20); // 调用函数并赋值

	cout << c; // 输出20
}

如果定义NDEBUG宏:

#define NDEBUG
#include <assert.h>
int add(int a, int b)
{
	return a + b;
}
void test()
{
	int a = 10, b = 10;
	int c = 0;
	assert((c = add(a, b)) == 20); // 这条语句会被忽略

	cout << c; // 输出0
}

 

十二、条件断点

通过举例来讲解:假如有一个for循环,需要在到达某个条件的时候,调试才停下来,而不是从一开始就停下来,那么此时就可以用条件断点:

【C++】Visual Studio调试C++代码的13个技巧

 【C++】Visual Studio调试C++代码的13个技巧

启动调试: 

 【C++】Visual Studio调试C++代码的13个技巧

 

十三、函数断点

当我们知道一个函数名,但不知道函数具体在哪里的时候;或者函数被重载的时候,希望在每次调用函数的时候能够暂停;此时需要用到函数断点:

【C++】Visual Studio调试C++代码的13个技巧

 【C++】Visual Studio调试C++代码的13个技巧

启动调试,就会自动来到add函数的位置: 

 【C++】Visual Studio调试C++代码的13个技巧

 

到了这里,关于【C++】Visual Studio调试C++代码的13个技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Visual Studio实用调试技巧---让你成为高端的程序员

    ​ 💓博客主页:江池俊的博客 👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路 ✅数据结构探索 💻代码仓库:江池俊的代码仓库 ​🎪 社区:GeekHub社区 ​ 🎉欢迎大家点赞👍评论📝收藏⭐ 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 在计

    2024年02月14日
    浏览(45)
  • Visual Studio 2022 程序员必须知道高效调试手段与技巧(中)

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,上一章给大家介绍了 Visual Studio 2022 快捷键和 版本介绍,今天就来给大家来点干货    ⛳️ 今天来正式来调试环节,带大

    2024年02月15日
    浏览(36)
  • Visual Studio 2022 程序员必须知道高效调试手段与技巧(上)

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,前面给大家介绍了Visual Studio 2022 下载与安装今天我们就来介绍一下 VS2022 最强大的功能调试?    ⛳️ 调试可以说是一个

    2024年02月15日
    浏览(35)
  • Visual Studio 2022 程序员必须知道高效调试手段与技巧(下)终章

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,上一章给大家介绍了 Visual Studio 2022功能使用,和一些常用快捷键!    ⛳️ 今天来正式来调试环节,带大家看看程序出

    2024年02月15日
    浏览(48)
  • Visual Studio调试代码教学

    本篇博客主要讲解程序员最应该掌握的技能之一——调试。我个人认为,学习编程,有2件事情非常重要,一是画图,一是调试。下面我会以Visual Studio 2022为例(VS的其他版本大同小异),演示如何调试一个C/C++代码。 常用的快捷键一定要记住!主要有以下4个: F9打断点,配合

    2024年02月02日
    浏览(36)
  • 在 Visual Studio 中远程调试 C++ 项目

    参考官方文档:https://learn.microsoft.com/zh-cn/visualstudio/debugger/remote-debugging-cpp?view=vs-2022 https://visualstudio.microsoft.com/zh-hans/downloads/ 打开网页,选择远程电脑系统类型下载 如果你已经安装了Visual Studio,则安装目录里面有远程工具: 例如:安装的Visual Studio 2022 社区版,远程工具在这

    2024年02月08日
    浏览(32)
  • Visual Studio Code调试C语言代码

    VS Code运行代码老是报错: 点击左边或者右上角的运行按钮报错 Visual Studio Code launch: program ‘输入程序名称,例如D:2022-2023学年学习资料2学期嵌入式系 统应用与开发课程设计shella.exe’ does not exist 打开\\\"aunch.json”| 解决方法 其实就是运行操作不对,点击代码中间-右键-Run Cod

    2024年02月16日
    浏览(48)
  • Visual Studio在Release模式下设置代码的调试

    Debug 模式下模型的加载速度、打开速度会降低很多,这里不推荐使用 Debug 模式进行调试。 Release 模式下可进行调试,使用 Release 模式调试,会提高模型打开速度、 加载速度、编译速度,默认的 release 版本不能进行调试,需要设置项目属性。 右键打开项目属性,切换配置至对

    2024年02月13日
    浏览(32)
  • 使用visual studio编译调试代码时,运行窗口一闪而过

            对于头一次使用visual studio或者是刚接触编程使用visual studio软件时,可能会遇到这么个情况:代码好不容易写好后准备进行调试,按下调试发现有个什么东西在屏幕上一闪而过,然后下面的输出框显示生成成功,但自己却什么也没有看到,遇到这种情况该怎么办?  

    2024年02月08日
    浏览(79)
  • Visual Studio Code 用 git 获取指定历史版本代码,并且拉取代码到指定根目录的方法

    1、新建文件夹,并用 VS打开该文件夹 2、终端执行  git init 3、找到想拉取项目的SSH地址,并复制该地址 4、把复制的SSH地址关联起来,关键语法 git remote add origin 地址 5、先拉取下来, git pull origin master 6、查看提交日志, git log --pretty=oneline (备注:oneline 意思是把每一个提交

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包