Visual Studio 2022 程序员必须知道高效调试手段与技巧(下)终章

简介: Visual Studio 2022 程序员必须知道高效调试手段与技巧(下)终章

📋 前言

  🌈hello! 各位宝子们大家好啊,上一章给大家介绍了 Visual Studio 2022功能使用,和一些常用快捷键!

  ⛳️今天来正式来调试环节,带大家看看程序出现错误时如何进行调试!废话说下面开始实践。

  📚本期文章收录在《学习工具》,大家有兴趣可以看看呐

  ⛺️ 欢迎铁汁们 ✔️ 点赞 👍 收藏 ⭐留言 📝!

🔥 注:前一篇文章在这里《高效调试手段与技巧(中)》

💬 一些调试的实例

💭 实例一

  ⛳️ 求 1!+2!+3! …+ n! ;不考虑溢出。我们先来看一下这段代码有什么问题?这时候我们如果输入3,期待输出9,但实际输出的是15。

  • 这时就要调试一下看看是哪里出现问题了
  • 首先推测问题出现的原因。初步确定问题可能的原因最好。

📚 代码演示:

#include <stdio.h>
int main()
{
  int i = 0;
  int sum = 0;//保存最终结果
  int n = 0;
  int ret = 1;//保存n的阶乘
  scanf("%d", &n);
  for (i = 1; i <= n; i++)
  {
    int j = 0;
    for (j = 1; j <= i; j++)
    {
      ret *= j;
    }
    sum += ret;
  }
  printf("%d\n", sum);
  return 0;
}

📑 代码结果:

📺 调试演示

首先我们可以确定是结果出现的问题,而结果又是循环来计算,我们就可以进去循环然后把监视窗口调开看看是不是这里的问题?

  • 3的阶乘应该是 (1*1)+(1*2)+(1*2*3) =9

这里我们通过调试就可以看到,我们的循环在第三次的时候就出现错误了。本来 ret 里面存储的是 3 的阶乘 9 可结果却是 12

  • 这里可以得出我们程序的错误了
  • ret 这个变量未初始化导致结果与预想不同

📚 代码改进:

💭 实例二(nice公司的笔试题)

前面关于我们结果与预想不一样!如何调试这次我们来看一下 nice公司的笔试题 这道笔试题看看!

  • 这道题我们该如何调试
  • 看上去这个代码没什么问题,顶多就是多循环了一次
  • 可结果却是无限循环

🔥 注:由于nice公司的笔试题,是在linux环境下的,所以博主对代码做了一个调整让他可以在Windows 环境下运行。

📚 代码演示:

本段代码需要再Windows 环境下调位 32位机器才能运行,否则越界容易出现程序崩溃!

#include <stdio.h>
int main()
{
    int i = 0;
    int arr[10] = { 0 };
    for (i = 0; i <= 12; i++)
    {
        arr[i] = 0;
        printf("hehe\n");
    }
    return 0;
}

📑 代码结果:

这里就可以看到我们在死循环的打印hehe!

✒️ 深度解析为什么会死循环 (nice公司的笔试题)

这时就要用到我们调试里面的内存功能了,其实这里 笔试题 为什么死循环的原因很简单,我们前面说过临时变量是存在 栈区 的,而 栈区 的使用习惯是;

  • 先使用高地址的空间在使用地地址的空间
  • 所以变量 i 就在数组上面一点创建的
  • 那么我们就可以画这样一幅图

🔥 注:栈区的讲解在《C/C++的内存分布》有过详细讲解大家可以去看看!

💻 观察内存

我们这里就可以调试一下,观察临时变量 i 和临时变量 arr 是不是在栈区是这样存储的!
这里为了观察方便就把数组初始化的时候先放上值!

  • 取地址 i 得到的地址是 0x00A6FBC0
  • 取地址arr 得到的地址是 0x00A6FBF0

这里就可以看到我们临时变量 arri 在内存 栈区中地区是这样存储的!当我们循环第13次时 arr[13] 越界!

  • 就会找到我们临时变量 i 的地址值处从而
  • 改为 0 开始无限循环

🔥 总结:所以我们在使用数组时一定要注意数组越界这个问题,不然就会引发bug。

💬如何写出好(易于调试)的代码

💭 优秀的代码:

  • 代码运行正常
  • bug很少
  • 效率高
  • 可读性高
  • 可维护性高
  • 注释清晰
  • 文档齐全

💬编程常见的错误

💭 编程常见的错误:

直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。

  • 通俗的讲就编译器下面的提示

💭 编译型错误

💭 链接型错误

看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。

  • 这里就是链接型错误,一般程序会直接提示

💭 运行时错误

这个就属于我们上面的 (nice公司的笔试题)为什么会无限循环这个就属于运行错误!

📝全篇总结

✅ 归纳:

☁️ 好了以上就是关于调试给大家演示的调试实例,大家看完了也要用起来啊!只有用起来才知道自己掌握了没!

看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注

💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖

拜托拜托这个真的很重要!

你们的点赞就是博主更新最大的动力!

有问题可以评论或者私信呢秒回哦。

目录
相关文章
|
7月前
|
存储 JSON BI
从解读 BDC 自动生成的代码谈起,讲解 SAPGUI 的程序组成部分试读版
从解读 BDC 自动生成的代码谈起,讲解 SAPGUI 的程序组成部分试读版
36 0
|
7月前
|
IDE Java 程序员
Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器(下)
Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器
34 1
|
7月前
|
IDE Java API
Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器(上)
Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器
70 1
|
9月前
|
存储 程序员 C++
Visual Studio 2022 程序员必须知道高效调试手段与技巧(中)
Visual Studio 2022 程序员必须知道高效调试手段与技巧(中)
132 0
|
9月前
|
程序员 C++ Windows
Visual Studio 2022 程序员必须知道高效调试手段与技巧(上)
Visual Studio 2022 程序员必须知道高效调试手段与技巧(上)
168 0
|
消息中间件 存储 安全
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
|
存储 程序员 编译器
【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?
【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?
104 0
|
人工智能 前端开发 JavaScript
提高Java开发效率:5个常用的Visual Studio代码扩展工具
对于软件工程师来说,能够更好地管理时间是一项宝贵的技能。因此,这里有5个Visual Studio代码扩展工具,可以帮助前端开发人员(以及更多的人!)将生产力至少提高10%到20%,下面和小编一起来看看吧!
188 0
提高Java开发效率:5个常用的Visual Studio代码扩展工具
|
SQL IDE 搜索推荐
Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器(二)
对于 Java 从业人员来说,无论是刚入门的新手还是专家,肯定都正在或者曾经使用过 Eclipse,这是一款优秀的编写 Java 程序的 IDE.
125 0
Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器(二)
|
存储 SQL IDE
Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器(一)
对于 Java 从业人员来说,无论是刚入门的新手还是专家,肯定都正在或者曾经使用过 Eclipse,这是一款优秀的编写 Java 程序的 IDE.
235 0
Eclipse 不为人所知的另一面 - 企业管理软件领域 ABAP 编程语言开发利器(一)