Visual Studio 调试与隐藏技巧

本文详细讲解VS中的调试技巧,包括Debug与Release模式对比,常用快捷键,变量监视、内存分析和反汇编应用,以及批量修改代码的高效方法,助你实现代码独立诊断问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

                               了解vs隐藏技巧与调试,实现真正的“代码独立”

一、前言 💐💐💐

二、什么是调试

三、Debug 与 Release 区别

四、调试快捷键

五、查看变量的创建与改变

1. 监视窗口

1)监视窗口如何打开?

2)监视窗口的作用:

2. 内存窗口

1)如何打开内存窗口:

 2)内存窗口有何用?

3. 反汇编

1)如何打开反汇编

2)反汇编如何运用?

六、代码修改技巧——批量修改

了解vs隐藏技巧与调试,实现真正的“代码独立”

一、前言 

 以上这个过程是不是包含了你写代码的心路历程了,新手在最开始的时候遇到问题肯定都会选择上面这个步骤去解决问题吧,一个‘ ;’没有打可能也会花费很久的时间,或许是一个打字的失误,让你改了几十分钟bug。

这篇文章将教会我们如何用vs的调试技巧去从根本上分析并解决问题⬇️

二、什么是调试

1)关于调试,百度百科是这样解释的

编好程序后,用各种手段进行查错和排错的过程。作为程序的正确性不仅仅表现在正常功能的完成上,更重要的是对意外情况的正确处理。从心理学的角度考虑,开发人员和调试人员不应该是同一个人

2)调试(Debugging):又称除错,是发现和减少计算机程序或电子仪器中程序错误的一个过程。

三、Debug 与 Release 区别

•  Debug:

Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力;

•  Release:

Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。他往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用;

四、调试快捷键

🔢•  F5

启动调试, 经常用来直接跳到下一个断点处。

🔢•  F9

创建断点和取消断点(也可以手动添加)

断点的重要作用,可以在程序的任意位置设置断点, 这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

🔢•  F10

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

🔢•  F11

逐语句,就是每次都执行一条语句(与F10类似),但是这个快捷键可以使我们的执行逻辑进入函数内部

🔢•  Ctrl + F5

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

五、查看变量的创建与改变

之前讲的快捷键教会了我们如何进入调试,那么现在要学的是让调试活起来的方法,打开窗口,这里我们能找到配合我们调试地其他窗口,接下俩我们来了解其中的监视、内存窗口与反汇编

注意一定要先调试了之后(按F10之后)窗口中才会出现我们想要的监视等其他窗口;

1. 监视窗口

1)监视窗口如何打开?

特别注意要在调试开始之后才有一下窗口

2)监视窗口的作用:

① 在主函数中监视变量的改变:

有时候for循环里或者while循环里变量的改变不是我们想要的值,就可以通过监视窗口配合F10逐句分析

②在函数内部查看数组

• 首先进入函数需要箭头到函数那条语句时按F11,进入函数内部

相信大家有过这样的经验:当你在函数内部再见时窗口中输入传入的临时数组的数组名时,得到的只有数组的第一个值⬇️

 那么数和解决才能看到数组的全部内容呢⬇️

只需要在数组名后面加上逗号,在输入数组大小就行了

2. 内存窗口

1)如何打开内存窗口:

 2)内存窗口有何用?

①. 查看变量在内存中的变化

 ②. 查看每个字节的变化

可以看到内存后面有有八个单位,每一个都是十六进制,一个单位占四个bit位,两个单位代表一个字节,一共32个bit位

例1:

 通过内存窗口解析:

一个字符的大小为一个字节,占内存的两个单位

61是十六进制,转换成是十进制:6 × 16^1 + 1 × 16^0  ==  97 == ' a ' 

例二:

请问一下代码打印的结果是什么呢?

#include <stdio.h>
int main()
{
  int arr[] = {1,2,3,4,5};
  short *p = (short*)arr;
  int i = 0;
  for(i=0; i<4; i++)
  {
    *(p+i) = 0;
  }
   
  for(i=0; i<5; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

通过内存窗口解析解析:

 答案是 0 0 3 4 5 ,为什么呢?

数组类型是整型(int)大小为四个字节,将其强制类型转换为短整型(short)大小为两个字节,并赋给短整型指针(short*),对指针加减跳过的就是两个字节,及改变内存里存放的值就是两个字节两个字节的改变了,而不是直接改变一个整型大小

从内存窗口中能够清晰的看到,当for循环走完之后,p+i还是没有指向到存放3的地址。

3. 反汇编

1)如何打开反汇编

2)反汇编如何运用?

我们用一个例题来解析: 


#include<stdio.h>
int main()
{
    int i = 1;
    int ret = (++i) + (++i) + (++i);
    printf("%d ", ret);
    return 0;
}

你是不是也遇到过这样的代码呢?像这种问题代码,在不同编译器上的运行结果不一样,但是你知道它编译器是如何结算的吗?我们打开反汇编就很容易知道了⬇️

 

解析之后得知:在vs环境下,编译器先将三个 ++i 算完,此时 i == 4 ,最后将三个 i 相加

六、代码修改技巧——批量修改

当你几百行代码,发现有一个变量名写错了,想修改结果发现几十个这样的名字,那有没有方法一次性批量修改呢?

➡️Ctrl + F

接下来我用gif来演示如何批量修改


这篇文章就到此为止啦,感谢你细心看完整篇文章

调试和发现错误的能力需要我们日积月累,所以亲自动手操作肯定是比一直用肉眼看是好的

如果有需要可以在评论区联系本人!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dusong_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值