当前位置: 首页 > news >正文

VS实用调试技巧(程序员的必备技能)

调试的重要性

在我们写代码的时候,如果程序出现了bug,那么下一步就是找到bug并修复bug!而这个找问题的过程就被称为调试(英文叫debug,消灭bug的意思)。

调试能观察到程序内部执行的细节,可以增加程序员对代码的理解和掌控,也能更高效的解决程序中存在的bug,提高写代码的能力!

调试的环境

在VS上编写程序的时候有两个版本,一个是Release、另一个是Debug

Debug称为调试版本,这个版本包含调试信息,并且不做任何优化,是程序员在调试程序时候用到的版本!

Release称为发布版本,这个版本是用户直接使用的,往往进行了各种优化,使得程序在代码大小和运行速度上都是最优的,而且不包含调试信息(不能调试)!

调试常用到的快捷键

F9:创建断点和取消断点

也可以在上图所指的地方单击鼠标左键创建和取消!

断点的作用:

断点可以在程序的任意位置进行设置,打上断点就可以使得程序执行到断点处暂停执行,可用于与其他的一些快捷键配合使用,便于观察。

条件断点:只有在程序执行过程中满足这个条件才触发断点,在断点处单击鼠标右键,然后点条件就可以设置想要的条件进行观察了!

F5:启动调试,经常用来直接跳到下一个断点处,一般是和F9配合使用

这里说的下一个断点不是指物理意义上的下一个断点,而指的是程序执行逻辑上的下一个断点!

F10:逐过程调试,可以是一条语句,也可以是一次函数调用

按F10调试时不能进入函数的内部观察细节!

F11:逐语句调试

按F11可以使我们在调试时让程序的执行逻辑进入函数内部,便于更好的观察细节!

Ctrl+F5:开始执行不调试

可以让程序直接运行起来

监视

当开始调试之后,在菜单栏中选择【调试】->【窗口】->【监视】,然后任意打开一个就可以观察程序运行时候的一些变量或者表达式了!

例如要观察下面这个代码中变量的值

内存

内存可以观察变量在内存中的存储情况。也是在开始调试之后,在菜单栏中选择【调试】->【窗口】->【内存】,然后任意打开一个

在内存中观察数据要在地址栏处输入地址才能在该地址处观察数据

举例

假如要调试下面这个代码

#include <stdio.h>
int add(int x, int y)
{int r = 0;r = x + y;return r;
}
int main()
{int a = 10;int b = 70;//写一个函数计算两个整数的和int ret = add(a, b);return 0;
}

调用add函数之前:先按F10开始调试

调用add函数:在代码执行到16行时,按F11进入函数内部,按F10执行下一条语句

调用完add函数之后变量ret的值:

常见的错误归类

编译型错误:一般是语法错误

链接型错误:比如拼写错误、头文件没包含等等

运行时错误:需要借助调试才能逐步定位问题所在,进而解决问题

http://www.lryc.cn/news/424659.html

相关文章:

  • 怎样卸载python
  • SQL注入靶场攻击——sqli-labs
  • Conda 环境打包与私有化部署指南
  • 网页版IntelliJ IDEA部署
  • 科创微应用平台小程序的设计
  • grom接入Prometheus,grafana
  • C++结构体指针强制转换以处理电力系统IEC103报文
  • vue3.0脚手架、路由、Element Plus安装案例:收录于Vue 3.0 后台管理系统案例
  • JS中原型相关的十个知识点总结
  • 使用DevKit套件调优 --未完
  • Vue3+ElementUI中的Table组件的使用
  • Highcharts 条形图:数据可视化的利器
  • 嵌入式初学-C语言-二四
  • tcpdump入门——每种flag分别表示什么意思
  • Qt如何封装工具
  • vue3进阶用法之通过调用函数动态加载组件用法及示例
  • 线程和进程的关系
  • 《AI视频类工具之十二——​ EbSynth》
  • Facebook国内企业户、海外户、国内二不限户以及三不限户区别何在?
  • 修改 ASP.NET Core 应用程序运行后的默认端口
  • 维基知识库系统Wiki.js本地Linux环境部署并配置公网地址远程访问
  • 010集——按值传递、按引用传递等方法——C#学习笔记
  • Linux系统调优技巧
  • 计算机学习
  • 数字医学影像系统PACS源码,三甲以下医院都能满足,C#语言开发,C/S架构系统成熟稳定,支持二次开发项目使用。
  • C++语言基础|循环结构
  • 【学习笔记】解决在声音输出中找不到蓝牙耳机设备的问题
  • PPPoE基础笔记
  • 开发组日志记录SPEC_v0.1.0
  • MySQL8 innoDB引擎的精髓