掌握高效实用的VS调试技巧

admin2024-07-04  10

1.编程常见的错误

1.1编译型错误

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

如下图所示:

掌握高效实用的VS调试技巧,在这里插入图片描述,第1张

以下是一些常见的编译型错误:

  1. 语法错误:代码不符合编程语言的语法规范,常见的语法错误包括拼写错误、缺少分号、括号不匹配等。

  2. 类型错误:变量或表达式的数据类型不匹配,例如将字符串赋值给整数变量。

  3. 未声明的标识符:使用了未声明的变量、函数或类名。

  4. 重复定义:重复声明、定义了同名的变量、函数或类。

  5. 缺少头文件或引用错误:在C/C++程序中,使用了未包含的头文件或引用了未定义的标识符。

  6. 语义错误:代码逻辑不合理或不符合语义要求,例如使用了未初始化的变量、使用了无效的循环条件等。

  7. 数组越界:访问数组时超出了数组的有效范围。

  8. 语义冲突:代码存在歧义或语义冲突,例如函数返回类型与函数定义不一致、重载函数无法区分等。

  9. 缺少库文件或链接错误:在链接阶段找不到需要的库文件或链接时出现错误。

  10. 操作符错误:使用了错误的操作符或操作符的操作数类型不匹配。

编译型错误需要在编译前进行修复,通常会在编译器输出错误信息,指示出错的代码行数和具体错误信息,以帮助开发人员进行修复。

1.2链接型错误

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

如下图所示:
掌握高效实用的VS调试技巧,在这里插入图片描述,第2张

以下是一些常见的链接型错误:

  1. 未定义的符号:代码中引用了其他源文件中定义的函数或变量,但链接器找不到其定义。

  2. 多重定义:多个源文件中定义了同名的函数或变量,链接器无法决定使用哪一个定义。

  3. 符号重定位错误:链接器无法正确将不同源文件中的代码和数据关联起来。

  4. 重复符号:同一个源文件中定义了多次同名的函数或变量。

  5. 引用符号解析错误:链接器无法正确解析函数或变量的引用关系。

  6. 缺少库文件:链接器无法找到需要的库文件或库文件不完整。

  7. 内存溢出:链接后的可执行文件大小超过了系统可用的内存空间。

  8. 地址冲突:多个源文件中定义了具有相同地址的变量。

1.3运行时错误

借助调试,逐步定位问题,最难搞。

如下图所示:
掌握高效实用的VS调试技巧,在这里插入图片描述,第3张

以下是一些常见的运行时错误:

  1. 空指针异常:当程序试图访问一个空指针时引发的错误。

  2. 数组越界异常:当程序试图访问数组中超出有效索引范围的元素时引发的错误。

  3. 除以零异常:当程序试图执行除以零的操作时引发的错误。

  4. 类型转换异常:当程序试图将一个不兼容的数据类型转换为另一种类型时引发的错误。

  5. 文件操作异常:当程序试图打开、读取或写入文件时发生了错误。

  6. 内存分配异常:当程序试图分配或释放内存时出现错误。

  7. 栈溢出:当程序递归调用层级过深或使用过多局部变量时导致程序栈溢出。

  8. 死锁:在多线程编程中,当两个或多个线程相互等待对方释放锁导致程序无法继续执行时发生的错误。

  9. 无限循环:当程序进入一个无法退出的循环时导致程序永远执行下去。

  10. 逻辑错误:程序逻辑的错误,导致程序得到错误的结果。

运行时错误通常会导致程序崩溃或产生不可预测的结果。为了解决运行时错误,可以使用调试工具来跟踪错误发生的位置,并检查代码逻辑以发现错误。此外,异常处理机制可以用于捕获和处理运行时错误,使程序在出现错误时能够进行适当的处理,避免程序崩溃。

2.调试

2.1什么是调试

  • 调试(Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。
  • 调试的基本步骤
    ✨发现程序错误的存在
    ✨以隔离、消除等方式对错误进行定位
    ✨确定错误产生的原因
    ✨提出纠正错误的解决办法
    ✨对程序错误予以改正,重新测试

2.2Debug和Release的介绍

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

掌握高效实用的VS调试技巧,在这里插入图片描述,第4张

Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

3.Windows环境调试介绍

首先在环境中选择 debug 选项,才能使代码正常调试。
如下图所示:

掌握高效实用的VS调试技巧,在这里插入图片描述,第5张

3.1使用快捷键

掌握高效实用的VS调试技巧,在这里插入图片描述,第6张

最常使用的几个快捷键:

  • F5
    启动调试,经常用来直接跳到下一个断点处。
  • F9
    创建断点和取消断点
    断点的重要作用,可以在程序的任意位置设置断点。
    这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

例如,当我们发现使用二叉树前序遍历时程序会异常,经过思考我们发现可能是前序遍历函数出现的问题,就可以在使用前序遍历函数的那一行按下F9创建断点,然后按下F5启动调试,程序直接跳到前序遍历函数这里:

掌握高效实用的VS调试技巧,在这里插入图片描述,第7张

使用F5开始调试:

掌握高效实用的VS调试技巧,在这里插入图片描述,第8张

  • F10
    逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
  • F11
    逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最长用的)。
    掌握高效实用的VS调试技巧,在这里插入图片描述,第9张
  • CTRL + F5
    开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

  • 停止调试就可以点击如下图所示的红色图标

掌握高效实用的VS调试技巧,在这里插入图片描述,第10张

  • 想知道更多快捷键?点我

3.2调试的时候可以查看的程序信息

3.2.1查看临时变量的值

步骤如下图所示:

掌握高效实用的VS调试技巧,在这里插入图片描述,第11张

掌握高效实用的VS调试技巧,在这里插入图片描述,第12张

掌握高效实用的VS调试技巧,在这里插入图片描述,第13张

3.2.2查看内存信息

步骤如下图所示:
掌握高效实用的VS调试技巧,在这里插入图片描述,第14张

掌握高效实用的VS调试技巧,在这里插入图片描述,第15张

掌握高效实用的VS调试技巧,在这里插入图片描述,第16张
掌握高效实用的VS调试技巧,在这里插入图片描述,第17张

掌握高效实用的VS调试技巧,在这里插入图片描述,第18张

掌握高效实用的VS调试技巧,在这里插入图片描述,第19张

3.2.3查看调用堆栈

步骤如下图所示:

掌握高效实用的VS调试技巧,在这里插入图片描述,第20张

结果如下:

掌握高效实用的VS调试技巧,在这里插入图片描述,第21张

3.2.4查看汇编信息

步骤如下图所示:

掌握高效实用的VS调试技巧,在这里插入图片描述,第22张
还有一种比较直接的方法:

掌握高效实用的VS调试技巧,在这里插入图片描述,第23张

结果如下:

掌握高效实用的VS调试技巧,在这里插入图片描述,第24张

3.2.5查看寄存器信息

步骤如下图所示:
掌握高效实用的VS调试技巧,在这里插入图片描述,第25张

结果如下:

掌握高效实用的VS调试技巧,在这里插入图片描述,第26张

4.多多动手,尝试调试

一定要熟练掌握调试技巧。

初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。

✨实例

//sum = 1! + 2! + 3! +...
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,期待输出9,但实际输出的是15。
如下图所示:

掌握高效实用的VS调试技巧,在这里插入图片描述,第27张

  • 首先我们知道整个实现逻辑的重点在for循环那里,错误很可能在那里出现,所以我们就在for循环那里按F9打下断点
    掌握高效实用的VS调试技巧,在这里插入图片描述,第28张
  • 然后F5开始调试
    掌握高效实用的VS调试技巧,在这里插入图片描述,第29张
  • 在控制台输入3后,使用F11逐行调试,并搭配监视窗口观察变量值
    掌握高效实用的VS调试技巧,在这里插入图片描述,第30张
  • 发现问题

掌握高效实用的VS调试技巧,在这里插入图片描述,第31张

  • 正确代码
    掌握高效实用的VS调试技巧,在这里插入图片描述,第32张

5.结语

在写代码时,我们不可避免会出现一些错误,以下是一些提高代码正确率的小tips:

以上就是今天所有的内容啦~ 大家要注意多多练习,完结撒花~ 🥳🎉🎉

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