【探索C语言中VS调试技巧】:提高效率和准确性

文章目录

  • 前言
  • 1. 什么是bug?
  • 2. 调试是什么?有多重要?
    • 2.1 调试是什么?
    • 2.2 调试的基本步骤
    • 2.3 Debug和Release的介绍
  • 3. Windows环境调试介绍
    • 3.1 调试环境的准备
    • 3.2 学会快捷键
    • 3.3 调试的时候查看程序当前信息
      • 3.3.1 查看临时变量的值
      • 3.3.2 查看内存信息
      • 3.3.3 查看调用堆栈
      • 3.3.4 查看汇编信息
  • 4.多多动手,尝试调试,才能有进步
  • 5. 如何写出好(易于调试)的代码。
    • 5.1 优秀的代码:
  • 6. 编程常见的错误
    • 7.1 编译型错误
    • 7.2 链接型错误
    • 7.3 运行时错误
  • 总结


前言

大家好我是艾老虎尤,Visual Studio (VS) 是一款广泛应用于C语言开发的集成发环境,其大的调试功能可以帮助开发者高效地定位和解决中的错误。本文将深入探讨C语言中VS调试器的各种技巧,旨在提供详细和权威的指导,以提高调试效率和精确性,话不多说,我们直接开始。


1. 什么是bug?

它真正的意思其实是小昆虫。 其实机器都是因为这位被称为计算机编程之母的女程序员-格蕾丝·霍普。1947年就职于美国海军的她,负责操作马克二号计算机。 而是世界上最早的万用计算机。 某一天这部 计算机不知道为何突然停止了运转。大家排查了很久才发现原来是继电器里卡进了一只 小虫子。 格蕾丝取出了这只小虫子以后, 把它粘在了马克二号的运行日志上并注释史上第一个计算机BUG。

2. 调试是什么?有多重要?

所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了,如果问心有愧,
就必然需要掩盖,那就一定会有迹象,迹象越多就越容易顺藤而上,这就是推理的途径。
顺着这条途径顺流而下就是犯罪,逆流而上,就是真相,一名优秀的程序员是一名出色的侦探。

一名优秀的程序员是一名出色的侦探。
在这里插入图片描述


2.1 调试是什么?

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

2.2 调试的基本步骤

  • 发现程序错误的存在
  • 以隔离、消除等方式对错误进行定位
  • 确定错误产生的原因
  • 提出纠正错误的解决办法
  • 对程序错误予以改正,重新测试

2.3 Debug和Release的介绍

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优
的,以便用户很好地使用。


3. Windows环境调试介绍

3.1 调试环境的准备

在这里插入图片描述

在环境中选择 debug 选项,才能使代码正常调试。

3.2 学会快捷键

在这里插入图片描述

最常使用的几个快捷键:
F5

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

F9

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

F10

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

F11

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

CTRL + F5

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

3.3 调试的时候查看程序当前信息

3.3.1 查看临时变量的值

在调试开始之后,用于观察变量的值。
在这里插入图片描述

3.3.2 查看内存信息

在调试开始之后,用于观察内存信息。
在这里插入图片描述

3.3.3 查看调用堆栈

通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置。
在这里插入图片描述

3.3.4 查看汇编信息

通过调用堆栈,可以清晰的反应函数的调用关系以及当前调用所处的位置。
在这里插入图片描述


4.多多动手,尝试调试,才能有进步

  • 一定要熟练掌握调试技巧。
  • 初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写
    程序,但是80%的时间在调试。
  • 我们所讲的都是一些简单的调试。
    以后可能会出现很复杂调试场景:多线程程序的调试等。
  • 多多使用快捷键,提升效率。

5. 如何写出好(易于调试)的代码。

5.1 优秀的代码:

在这里插入图片描述

  1. 代码运行正常
  2. bug很少
  3. 效率高
  4. 可读性高
  5. 可维护性高
  6. 注释清晰
  7. 文档齐全

常见的coding技巧:
8. 使用assert
9. 尽量使用const
10. 养成良好的编码风格
11. 添加必要的注释
12. 避免编码的陷阱。


6. 编程常见的错误

7.1 编译型错误

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

7.2 链接型错误

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

7.3 运行时错误

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

温馨提示:

做一个有心人,积累排错经验。

总结

通过学习本文中介绍的C语言中VS调试器的技巧,开发者可以充分利用其强大的功能,提高调试效率和精确性。无论是初学者还是有经验的开发者,在日常开发中都能够更加高效地定位和解决问题。同时,我们也强调了编写清晰的注释、使用有意义的变量名以及书写易读性高的代码的重要性,以帮助开发者更好地使用调试器。只要掌握了这些调试技巧,开发者就能更加自信地应对各种编程挑战,提升开发效率和代码质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/137322.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言生成随机数、C++11按分布生成随机数学习

C语言生成随机数 如果只要产生随机数而不需要设定范围的话,只要用rand()就可以;rand()会返回一随机数值, 范围在0至RAND_MAX 间;RAND_MAX定义在stdlib.h, 其值为2147483647; 如果想要获取在一定范围内的数的话,直接做…

【数据分享】2023年全国地级市点位数据(免费获取\shp格式\excel格式)

地级市点位数据是我们各项研究中经常使用到的数据,在之前的文章中我们分享过2022年度的地级市及以上城市的点位数据(可查看之前的文章获悉详情)。本次我们带来的是2023年度的全国范围的地级市及以上城市的点位数据,点位位置为市政…

大数据Flink(八十四):SQL语法的DML:窗口聚合

文章目录 SQL语法的DML:窗口聚合 一、滚动窗口(TUMBLE)

[激光原理与应用-68]:如何消除50Hz工频干扰和差分信号应对工频干扰

目录 一、什么工频干扰 1.1 什么工频干扰 1.2 工频干扰的幅度 1.3 工频干扰如何进入设备 1.4 工频干扰的负面影响 二、如何消除工频干扰 2.1 要消除工频干扰,可以考虑以下方法: 2.2 要具体消除工频干扰,可以采取以下措施 2.3 使用差…

React(react18)中组件通信04——redux入门

React(react18)中组件通信04——redux入门 1. 前言1.1 React中组件通信的其他方式1.2 介绍redux1.2.1 参考官网1.2.2 redux原理图1.2.3 redux基础介绍1.2.3.1 action1.2.3.2 store1.2.3.3 reducer 1.3 安装redux 2. redux入门例子3. redux入门例子——优…

Mybatis 中 SQL 注入攻击的 3 种方式

SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少。往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手,希望通过Mybatis框架使用不当导致的SQL注入问题为例&#xff…

[Qt/C/C++]JSON和程序发布

文章摘于 爱编程的大丙 文章目录 1. JSON1.1 Json数组1.2 Json对象1.3 注意事项 2. Qt中JSON操作2.1 QJsonValue2.2 QJsonObject2.3 QJsonArray2.4 QJsonDocument2.5 举例2.5.1 写文件2.5.2 读文件 3. cjson库的使用3.1 cJSON结构体3.2 cJson API3.2.1 数据的封装3.2.2 Json对…

Kotlin File FileTreeWalk walkTopDown onEnter onLeave

Kotlin File FileTreeWalk walkTopDown onEnter onLeave Python遍历文件目录os.walk_for subfolder in subfolders: print(foldername/_zhangphil的博客-CSDN博客import osfor folderName, subfolders, filenames in os.walk(rD:\code\vs_code): print(当前文件夹: folderName…

踩坑:Invalid character found in method name. HTTP method names must be tokens

一、原因 在进行本地小程序与服务端请求时,由于加了签名认证,访问接口时报错 Spring boot端 小程序端 二、解决方案 2.1 更改访问路径 将https:更换成http: 示例:https://localhost:8080 改为 http://localhost:8080 2.2其他原因 ssl证书到期了Tomcat的header缓冲区大小不…

Python 搭建编程环境

一、搭建编程环境 1、下载python 官网:https://www.python.org 2、开始安装 下载安装版本,双击下载的安装包,如下: 步骤一: 步骤二: 步骤三: 安装完成后执行下面的操作,判断是否…

用Jmeter进行压测详解

简介: 1.概述 一款工具,功能往往是很多的,细枝末节的地方也很多,实际的测试工作中,绝大多数场景会用到的也就是一些核心功能,根本不需要我们事无巨细的去掌握工具的所有功能。所以本文将用带价最小的方式讲…

vue的由来、vue教程和M-V-VM架构思想、vue的使用、nodejs

vue vue的由来 vue教程和M-V-VM架构思想 vue的初步简单使用 nodejs vue的由来 # 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 ->…

国泰君安基本操作学习

对于主面板 1.放大或者缩小k线方法:按着ctrl键滚轮 2.切到历史k线:不断缩小k线后,把鼠标放置k线位置再按着ctrl滚轮放到可以切到当时的历史数据。 ★3.上下切换股票:滚轮。 ★4.面板直接输入股票代码后,自动弹出窗…

驱动开发练习,platform驱动模型的使用

一.总线模型介绍 linux中将一个挂载在总线上的驱动的驱动模型分为三部分:device、driver和bus; device部分:用来保存设备信息对象,在内核中一个klist_device链表中进行管理; driver部分:用来保存驱动信息对…

“毛细血管”的进化:华为分销业务如何让伙伴也有“高能级”

作者 | 曾响铃 文 | 响铃说 数字化蓬勃发展的大时代,除了那些中、大型企业,数量更为庞大的小微企业同样有借助数字化产品、服务来提升企业经营的需求,由此也带来了广袤的数字化分销市场。 这里处在聚光灯之外,很少被数字化时代…

PHP8的类与对象的基本操作之成员变量-PHP8知识详解

成员变量是指在类中定义的变量。在类中可以声明多个变量,所以对象中可以存在多个成员变量,每个变量将存储不同的对象属性信息。 例如以下定义: public class Goods { 关键字 $name; //类的成员变量 }成员属性必须使用关键词进行修饰&#xf…

无涯教程-JavaScript - SUMIFS函数

描述 SUMIFS函数添加其满足多个条件的所有参数。 语法 SUMIFS (sum_range, criteria_range1, criteria1, [criteria_range2, criteria2] ...)争论 Argument描述Required/OptionalSum_rangeThe range of cells to sum.RequiredCriteria_range1 使用Criteria1测试的范围。 Cr…

leetcode646. 最长数对链(java)

最长数对链 题目描述贪心解法二 动态规划 dp 题目描述 难度 - 中等 leetcode646. 最长数对链(java) 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i] [lefti, righti] 且 lefti < righti 。 现在&#xff0c;我们定义一种 跟随 关系&#xff0c;当且仅…

RHCSA_Linux 从命令行管理文件

目录 一、文件命令规范&#xff1a; 二、创建链接文件 1、创建软链接文件 2、创建硬链接文件 三、目录操作命令 1、创建目录 -- mkdir 2、统计目录及文件的空间占用情况 -- du 3、删除目录文件 四、创建、删除普通文件 1、创建普通文件 2、删除普通文件 五、数据流和…

Vivado下PLL实验

文章目录 前言一、CMT&#xff08;时钟管理单元&#xff09;1、CMT 简介2、FPGA CMT 框图3、MMCM 框图4、PLL 框图 二、创建工程1、创建工程2、PLL IP 核配置3、进行例化 三、进行仿真1、创建仿真文件2、进行仿真设置3、进行行为级仿真 四、硬件验证1、引脚绑定2、生成比特流文…