程序的调试技巧。

article/2025/9/1 16:19:07

什么是调试?

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

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

我们找Bug跟侦破类似,也就是调试,如果我们写代码知道错了还继续顺着错误往下写,那越写越错;如果我们顺着错误往上找Bug那就会找出真相!

一名优秀的程序员是一名出色的侦探,每一次调试都是尝试破案的过程。

所以一个程序员如果不会自己调试,那就不是一个合格的程序员。

如果我们只会写Bug,不会改Bug,进了公司工作后,自己写的代码有Bug不会改,让别人改吗?一直让他人给自己改,那离被开除就不久了吧。

调试的基本步骤:

1.发现程序错误的存在。

2.定位错误。

3.找出错误的原因,并找到正确的解决方法。

4.对错误进行改正,重新测试。

调试中有两个功能一个是Debug、一个是Release:

Debug被称为调试版本:包含调试信息,不做任何优化,便于和程序员调试。

Release被称为发布版本:对程序进行各种优化,使程序在代码大小和运行速度上是最优的,便于用户使用。

 那么有什么用呢?

先用Debug演示一下。

注意红色圈起来的Debug和左边箭头,按F10进行调试,然后按一下F10左边的箭头就会往下走一步。可以一步一步的调试。

再用Release演示一下:

与Debug不同的是,按F10往下走,走一遍 for 循环就结束走到 return 直接就出来了,不能调试。

下面是Debug生成的文件大小与Release生成的文件大小: 

可以看到Release生成的exe文件确实小于Debug生成的exe文件,因为Release做了优化,在大小和运行速度上。

Debug:

Release: 

写好代码要调试需要在Debug上进行调试;编译好的可执行程序给用户使用,用Release。 

调试的快捷键(高频):

F5:开始调试,但是不能单独使用,一般是和 F9 搭配使用。

下面是F5单独使用,因为程序本来就有Bug,所以按F5之后就一直打印。

因为按F5之后它会一直执行,没有其它拦截的话不会停下来,直到结束。

F9:切换断点 / 设置(取消)断点。

鼠标放在左边(代码行号的左边)点一下或者 按F9 出现了红点,红点就是断点;如果再点一下或者按F9红点(断点)就会取消。

断点出现之后,鼠标放在红点上点击右键,可以进行断点设置;因为程序本身有bug,所以我给了条件 i==5,i == 5 就会停下来,不会像第一次按F5那样一直在打印,这个就是断点。

那有什么好处呢?

假如,自己写的代码有 1000 行了,前 700 行代码没问题,所以我们只需检查后 300 行代码就好了,我们把断点设置在 700 行处,按F5停下来,然后一步异步进行调试就好了。不然我们每次从第 1 行一步一步进行调试吗?那如果好几千行代码呢?浪费多少时间啊,还不如重新写一遍吧。

F10:逐过程。

按一下F10之后出现左边的箭头之后,按一次F10会往下走一步,但是有没有发现箭头没有进入 Add 函数内部,直接算了求和,打印了出来。这个就是逐过程。 

 F11:逐语句。

按一下F11之后出现左边的箭头之后,按一次F11会往下走一步,与F10不同的是,当箭头走到 Add 函数的时候,再按一次F11,会进入 Add 函数内部,走每一句。这个就是逐过程。 

上面是常用的调试快捷键,还有一些快捷键可以再了解一些,我只把常用的做了一下示范。

调试的时候怎么查看程序信息?

我前面的文章也有介绍怎么查看监视、内存等等,可以再看一下前面的文章。

下面简单再介绍一下。

 以上就是常用的调试的一些技巧。

作为一名程序员学会调试非常重要!


http://chatgpt.dhexx.cn/article/F2WnNM9o.shtml

相关文章

程序入门调试

1.先设置断点 在调试代码之前要先设置一个断点,否则调试无法进行; ps:设置断点的方法 找到自己要测试的那一行代码,按f9或者也可直接用鼠标点击代码前的空白处如下图所示; 2.熟悉常用的命令 常用的命令符合有四个,分…

谱分解实例与理解

这篇博文想从一个实际的矩阵出发,阐述谱分解究竟干了什么。——非数学系的cver

谱分解(SD)

前提:矩阵A必须可相似对角化! 充分条件: A是实对称矩阵A有n个互异特征值A^2 AA^2 Er(A) 1 且 tr(A)!0 谱分解(Spectral Decomposition ),又称特征分解,或相似标准形分解,是将矩阵分解为由…

矩阵分解——谱分解

文章目录 先修知识: 幂等矩阵谱分解定理谱分解的流程 谱分解的推论谱分解的应用 先修知识: 幂等矩阵 谱分解定理 谱分解的流程 谱分解的推论 谱分解的应用

【信号与系统|吴大正】4:信号分解、傅里叶变换与信号谱(上)

信号分解、傅里叶变换与信号谱 信号的分解 在学习【信号分解】这一部分时,脑海里要有两个概念: 其一,我们整本书学习的思路就是围绕着将信号分解成基本信号,将系统的响应转变成基本响应这一思路来开展的;其二&#xf…

机器学习笔记——14 矩阵谱分解与奇异值分解及其背后的线性算子理论 (实战项目:利用SVD进行图像压缩)

机器学习笔记——14 矩阵谱分解与奇异值分解及其背后的线性算子理论 (实战项目:利用SVD进行图像压缩) 本篇文章介绍矩阵的谱分解与奇异值分解 (Singular Values Decomposition,SVD),为了对其有一个更为本质性地认识,本文从线性算子的理论讲起…

从矩阵谱分解到矩形的最少正方形剖分

上次听AK讲到谱分解的时候,若有所思,下面将对思考稍作记录。 矩阵谱分解 关于谱分解有很多定义,主要区别在于条件的强弱,有的要求一个 n n n阶矩阵不仅要求可对角化,而且加强条件至其 n n n个特征值 λ 1 , λ 2 , .…

谱本征正交分解 (SPOD)附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

通信基础 7 —— 遍历保密速率、谱分解物理意义

目录 遍历保密速率(ergodic secrecy rate)闭式解(解析解)和数值解闭式解数值解 拉普拉斯变换谱分解/正交分解 遍历保密速率(ergodic secrecy rate) 说遍历容量不十分准确,应该叫各态历经性容量…

【推荐系统】特征值分解(谱分解)和奇异值分解(SVD),即在PCA上的应用

特征值分解(谱分解EVD)和奇异值分解(SVD),即在PCA上的应用 1. 概念 特征值分解和奇异值分解在机器学习领域都有着广泛的应用。两者有着很紧密的关系,二者的目的都是一样,就是提取出一个矩阵最…

R语言主成分分析PCA谱分解、奇异值分解预测分析运动员表现数据和降维可视化

最近我们被客户要求撰写关于主成分分析PCA的研究报告,包括一些图形和统计输出。 本文描述了如何 使用R执行主成分分析 ( PCA )。您将学习如何 使用 PCA预测 新的个体和变量坐标。我们还将提供 PCA 结果背后的理论。 主成分分析PCA降维方法和R语言分析葡萄酒可视化实…

【矩阵论】2. 矩阵分解——单阵谱分解

矩阵论 1. 准备知识——复数域上矩阵,Hermite变换) 1.准备知识——复数域上的内积域正交阵 1.准备知识——Hermite阵,二次型,矩阵合同,正定阵,幂0阵,幂等阵,矩阵的秩 2. 矩阵分解——SVD准备知识——奇异值…

可对角化和谱分解的区别

内容为个人理解,才疏学浅,如有错误,欢迎指正。 谱分解定理:向量空间V上的任意正规算子M,在V的某个标准正交基下可以对角化。反之,任意可对角化的算子都是正规的。 理解: (1&#x…

R语言矩阵特征值分解(谱分解)和奇异值分解(SVD)特征向量分析有价证券数据

最近我们被客户要求撰写关于特征值分解的研究报告,包括一些图形和统计输出。 R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法。 作为数据分析的一部分,我们要在有价证券矩阵的操作上做一些工作,只需几行代码。 …

【矩阵论】2. 矩阵分解——正规谱分解

矩阵论 1. 准备知识——复数域上矩阵,Hermite变换) 1.准备知识——复数域上的内积域正交阵 1.准备知识——Hermite阵,二次型,矩阵合同,正定阵,幂0阵,幂等阵,矩阵的秩 2. 矩阵分解——SVD准备知识——奇异值…

【线性代数】矩阵的特征值分解(对角化、谱分解)

目录 1 前言2 矩阵的特征值分解2.1 从定义的角度理解2.2 从变换的角度理解(来自参考文献[3]) 3 对角矩阵(补充)3.1 对角矩阵的定义3.2 对角矩阵线性变换的几何意义 4 矩阵对角化5 相似矩阵与特征值6 参考文献 1 前言 矩阵的特征值分解又可以称作矩阵的对…

矩阵的谱分解 (详细推导步骤~~~特征值分解特征向量

所谓矩阵的分解,就是将一个矩阵写成结构比较简单的或性质比较熟悉的另一些矩阵的乘积。矩阵的分解方法有很多种,包括三角分解、QR(正交三角)分解、最大秩分解、奇异值分解和谱分解,所有这些分解在数值代数和最优化问题…

c语言-gotoxy实现先全部输出再做全部输入操作

需要用到的头文件&#xff1a; #include<windows.h> #include <iostream>代码&#xff1a; gotoxy(a,b)光标控制函数 a为行&#xff0c;b为列&#xff0c;坐标原点在左上角向右是行正方向&#xff0c;向下为列正方向 中文符号汉字在列方向为2个空间&#xff0c;英…

C语言 时钟模拟(gotoxy函数的运用)

时钟模拟&#xff0c;运用gotoxy()函数和Sleep()函数。 效果&#xff1a; #include <stdio.h> #include <windows.h> #include <time.h> #define XHOUR 40 //打印小时的起始x坐标&#xff0c;即a&#xff0c;g交点横坐标 #define YHOUR 27 #define HOUR 1 …