Visual studio调试技巧

server/2024/9/24 16:10:58/

Visual studio调试技巧

  • bug是什么?
  • Debug和Release
    • Debug
    • Release
  • 如何调试
  • VS调试快捷键
  • 调试过程中查看程序信息
    • 查看临时变量的值
    • 查看内存信息
    • 查看调用堆栈
    • 查看汇编信息
    • 查看寄存器信息
  • 编译常见错误
    • 编译型错误
    • 链接型错误
    • 运行时错误

bug是什么?

  • bug的英文释义为“臭虫、虫子”,现在人们将在电脑系统或者程序中隐藏着一些未被发现的缺陷和问题统称为bug。

人类历史上第一个计算机程序bug就是和“虫子”有关。
有⼀位为美国海军⼯作的电脑专家叫格蕾丝·赫柏(Grace Murray Hopper),格蕾丝·赫柏1947年9⽉9⽇对Harvard Mark II设置好17000个继电器进⾏编程后,技术⼈员正在进⾏整机运⾏时,它突然停⽌了⼯作。于是他们爬上去找原因,发现这台巨⼤的计算机内部⼀组继电器的触点之间有⼀只⻜蛾,这显然是由于⻜蛾受光和热的吸引,⻜到了触点上,然后被⾼电压击死。所以在报告中,赫柏⽤胶条贴上⻜蛾,并把“bug”来表⽰“⼀个在电脑程序⾥的错误”,“Bug”这个说法⼀直沿⽤到今天。

  • Bug的官方释义:是用于描述计算机程序或系统中的错误,缺陷,错误,故障或错误的常见术语,该错误,缺陷,错误,故障或错误会导致产生错误或意外的结果,或导致其行为异常。大多数错误是由于人们在程序的源代码或其设计中所犯的错误和错误引起的,而一些错误则是由编译器生成的错误代码引起的。包含大量错误和/或严重干扰其功能的错误的程序被认为是错误的。详细说明程序中错误的报告通常称为错误报告,故障报告,问题报告,故障报告,变更请求等。——来自维基百科

Debug和Release

Debug和Release

Debug

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

  • Debug(调试)的官方释义:是一种有条理的过程,可以发现并减少计算机程序或电子硬件中的错误或缺陷数量,从而使其表现出预期的效果。当各个子系统紧密耦合时,调试会变得更加困难,因为一个子系统中的更改可能会导致另一个子系统中出现错误。已经编写了许多有关调试的书籍,因为它涉及许多方面,包括:交互式调试,控制流,集成测试,日志文件,监视,内存转储,统计过程控制,以及改进检测并简化更改的特殊设计策略。——来自维基百科

Release

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

Release

如何调试

  • 调试:又称除错,是发现和减少计算机程序电子仪器设备中程序错误的一个过程。

调试的基本步骤:
1.发现程序错误的存在
2.以隔离、消除等方式对错误进行定位
3.确定错误产生的原因
4.提出纠正错误的解决办法
5.对程序错误予以改正,重新测试

VS调试快捷键

  • Visual studio是一个集成开发环境,简称IDE,它是集成了编辑器、编译器和调试器。(在Linux环境下,gcc是编译器,gdb是调试器)
  • 下面简绍几个在调试过程中常见的vs快捷键

F9:创建断点,取消断点

F9

  • 断点的作用是可以在程序任意位置创造断点,在想让程序停留的地方打上断点,程序暂停执行后可以配合其他快捷键进行调试。

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

F9

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

F10

F11:逐语句,即每一次都执行一条语句,最为主要的是这个快捷键可以进入函数内部

F11

ctrl+F5:开始执行不调试,在想让程序执行起来,而非调试可以直接使用

ctrl+F5

调试过程中查看程序信息

  • 在查看调试过程中的程序信息时,必须先要开始调试即F10

查看临时变量的值

查看临时变量的值

查看内存信息

查看内存信息

查看调用堆栈

查看调用堆栈

查看汇编信息

查看汇编信息

查看寄存器信息

查看寄存器信息

编译常见错误

编译型错误

  • 编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝⻢迹的,双击错误信息也能初步的跳转到代码错误的地⽅或者附近

链接型错误

  • 链接型错误一般原因是因为标识符名不存在,拼写错误,标识符不存在或者引用的库不存在等原因

运行时错误

  • 运行时错误时程序员在编写程序时,为根据自身所想而产生的错误,需要用调试解决

http://www.ppmy.cn/server/31533.html

相关文章

LinkedList常考面试题

LinkedList是Java集合框架中的一个重要部分,它是一种线性数据结构,不同于ArrayList基于数组实现,LinkedList是基于双向链表实现的。这使得它在插入、删除操作上具有较高的效率,但随机访问元素时效率较低。以下是一些关于LinkedLis…

Debian 12 -bash: netstat: command not found 解决办法

问题表现: debian 12系统中,不能使用 netstat命令 处理办法: netstat 命令就的net-tools中,把net-tools工具安装上就好了。 apt-get install netstat 安装之后就可以使用netstat 命令了,如查询端口情况: …

从零开始学AI绘画,万字Stable Diffusion终极教程(二)

【第2期】关键词 欢迎来到SD的终极教程,这是我们的第二节课 这套课程分为六节课,会系统性的介绍sd的全部功能,让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在第一节课里面,我们…

Spark使用Java读取Mysql

在Apache Spark中使用Java来读取MySQL数据库中的数据,你需要使用JDBC(Java Database Connectivity)来连接MySQL,并且通常你会使用Spark的JdbcRDD或者DataFrameReader(通过Spark SQL)来读取数据。不过&#…

C++|STL-list运用(1)

cplusplus.com/reference/list/list/?kwlist list介绍 list是一个双向循环链表,双向循环链表它的每个节点都有两个链接,一个指向前一个节点,另一个指向下一个节点,且最后一个结点指向头节点。 结点组成 1.数据域 2.指针域 &a…

深度学习之基于Matlab神经网络的活体人脸和视频人脸识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 人脸识别技术作为生物识别技术的一种,近年来得到了广泛的关注和应用。与传统的身份认证方…

Linux的有关权限的学习

1.认识权限在Linux中的表示 在Linux中,一切皆文件,而每个文件都会有其相对应的操作权限。那么,我们该怎么来认识他们呢? 首先我们可以看到,在每个test文件的前面都会有一个-rw-r--r--这个字符,而这个字符&…

FreeBSD下安装Linux兼容系统Ubuntu

FreeBSD有个很神奇的功能,就是跟Linux二进制兼容,也就是可以直接运行linux的bin文件。还有个更神奇的功能,就是能运行出一套Linux系统,完全是linux的用户,linux的目录系统,而且还可以选是Centos系统还是Ubu…