VS里那些实用的调试(debug)技巧

简介: VS里那些实用的调试(debug)技巧

前言——————希望现在在努力的各位都能感动以后享受成功的自己!


首先我们要来了解什么是bug——————bug本意是“昆虫”或“虫子”,现在⼀般是指在电脑系统或程序中,隐藏着的⼀些未被发现的缺陷或

问题,简称程序。


“Bug” 的创始人格蕾丝·赫柏(Grace Murray Hopper),她是⼀位为美国海军⼯作的电脑专家,


1947年9⽉9⽇,格蕾丝·赫柏对Harvard Mark II设置好17000个继电器进行编程后,技术⼈员正在进行


整机运⾏时,它突然停⽌了⼯作。于是他们爬上去找原因,发现这台巨大的计算机内部⼀组继电器的


触点之间有⼀只⻜蛾,这显然是由于飞蛾受光和热的吸引,⻜到了触点上,然后被⾼电压击死。所以


在报告中,赫柏⽤胶条贴上飞蛾,并把“bug”来表示“⼀个在电脑程序⾥的错误”,“Bug”这个说


法⼀直沿用到今天。


在计算机领域,"bug" 通常指的是程序或软件中的错误、故障或缺陷。它可以导致程序的意外行为、崩溃、数据丢失或其他不正常的情况。


当程序员在编写代码时,可能会犯一些错误,这些错误可能会导致程序在运行时出现问题。这些问题可能是由于代码逻辑错误、语法错误、算法错误、内存泄漏等引起的。


发现和修复 bug 是软件开发过程中的重要环节。程序员通常使用调试工具和技术来识别和解决 bug。在软件发布之前,通常会进行测试以发现和修复尽可能多的 bug,以确保软件的质量和稳定性。


除了计算机领域,"bug" 这个词也可以用于其他领域,表示类似的错误或缺陷,如生物学中的基因突变或设备中的故障等。


总的来说,"bug" 是指存在于程序、系统或其他事物中的缺陷或错误,需要被修复或纠正。


什么是调试(debug)


当我们发现程序中存在的问题的时候,那下⼀步就是找到问题,并修复问题。


这个找问题的过程叫称为调试,英⽂叫debug(消灭bug)的意思。


调试⼀个程序,⾸先是承认出现了问题,然后通过各种⼿段去定位问题的位置,可能是逐过程的调


试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码,


重新测试。


那么我们再来看看VS里的Debug和Release是什么意思?


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


程序员在写代码的时候,需要经常性的调试代码,就将这⾥设置为 debug ,这样编译产⽣的是


debug 版本的可执⾏程序,其中包含调试信息,是可以直接调试的。


Release 称为发布版本,它往往是进⾏了各种优化,使得程序在代码大小和运⾏速度上都是最优的,


以便用户很好地使⽤。当程序员写完代码,测试再对程序进⾏测试,直到程序的质量符合交付给⽤⼾


使用的标准,这个时候就会设置为 release ,编译产生的就是 release 版本的可执行程序,这个


版本是用户使用的,无需包含调试信息等。

Debug

Release

对比它们两个的内存也是可以发现release比debug版本明显要小。


VS调试快捷键

调试之前我们需要将一个支持调试开发的环境所以我们把VS设置为Debug环境,如图:



现在我们来了解一下VS里常用的快捷键:


F9:创建断点和取消断点


断点的作⽤是可以在程序的任意位置设置断点,打上断点就可以使得程序执⾏到想要的位置暂定执


行,接下来我们就可以使⽤F10,F11这些快捷键,观察代码的执⾏细节。


条件断点:满足这个条件,才触发断点


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


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


F11:逐语句,就是每次都执⾏⼀条语句,但是这个快捷键可以使我们的执⾏逻辑进⼊函数内部。在函


数调⽤的地⽅,想进⼊函数观察细节,必须使⽤F11,如果使⽤F10,直接完成函数调⽤。


CTRL + F5:开始执⾏不调试,如果你想让程序直接运⾏起来⽽不调试就可以直接使⽤。


监视和内存观察

监视

开始调试后,在菜单栏中 调试---->窗口---->监视,里面有四个监视窗口,我能随便打开一个便可以了。


随便选择一个监视窗口后,便可输入你想监视的变量或地址等!如下:



内存

如果觉得仅仅看监视窗口无法解决问题,可以试着看一下内存,也是开始调试后,在菜单栏里     调试---->窗口---->内存,打开内存窗口


打开其中一个窗口你可以在地址那里输入想看的地址,可借助&符号确定变量的地址哦。然后按下那个回旋箭头,然后为了好看我把它显示的列数变为4,大家可以凭感觉来观察内存。如下:


输入地址按下箭头就会变成如下的内存显示了。

调试的实例

如:求1!+2!+3!······n!的和。


我们通过简单的测试,输入一个较小的数进行检验发现计算结果并不正确,那说明我们的代码发生错误了,那么我们便要开始进行调试,找出bug。


我们打开监视窗口进行一次循环发现计算1!时并没有发生错误 。如上图:


然后我们计算2!和相加的sum也没有错误。如上图:


接下来我们看一下3!有没有算错呢?


显而易见代码在计算3!时发生错误,3!=6,但现在 ret 的值为12,通过思考相信我们都能从ret上找出问题,即ret并没有重置,即在计算3!时,ret的值开始计算时便是上次2!的结果,即为2.故这里的ret 计算出12,那我们只需要在计算每个数的阶乘时将ret重置为1,即可,然后继续检验代码知道改出一个完美的代码。

所以各位感受到调试的魅力了吗?

几种代码出错的类型

编译型错误

编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的,双击错误信息也 能初步的跳转到代码错误的地方或者附近。编译错误,随着语言的熟练掌握,会越来越少,也容易解决。如:


少分号啥的,现在编译器都可以告诉你错误在哪。

链接型错误


看错误提⽰信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。⼀般是因为标识符名不存在 ,拼写错误 , 头文件没包含 ,引用的库不存在


如上图,sqort没有定义。

运行时错误


运行时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运行时问题。

这个问题就是上面的实例,ret忘重置为1,等类似问题。


好了本文到此结束。



目录
相关文章
|
12月前
|
C#
C#程序Debug文件夹可以运行,无法调试
C#程序Debug文件夹可以运行,无法调试
|
1月前
|
运维 NoSQL 安全
debug学习
debug学习
124 65
|
3月前
|
Shell Python
调试程序的故乡_调试程序_debug_next_下一步_list_pdb3
这篇 content 主要介绍了使用调试工具 pdb3 进行 Python 程序调试的基本步骤与技巧。首先,当遇到调试困境时,可以通过输入 `help` 查看可用命令。使用 `l` (list) 或 `ll` (list long) 分别查看当前行附近的代码或整个程序的代码。`l .` 和 `l n` 可以分别用于查看当前行周围的代码或从第 n 行开始的代码。通过 `next` (`n`) 命令逐步执行程序,观察每一步的结果。当到达程序末尾并再次使用 `next` 时,程序会重新开始执行。
17 2
|
4月前
深入理解Debug断点调试技巧
深入理解Debug断点调试技巧
|
5月前
|
程序员
调试程序DEBUG的使用
调试程序DEBUG的使用
48 0
|
5月前
|
网络架构
Debug系统调试
Debug系统调试
断点调试(debug)
断点调试(debug)
22215 0
|
Web App开发
chrome调试11-在console中调试日志
chrome调试11-在console中调试日志
99 0
chrome调试11-在console中调试日志
C# Debug Trace调试类用法
    Debug和Trace都是调试类。     Debug类的方法只有DEBUG版中生效,而Trace的方法可以在DEBUG/RELEASE版本中生效。 一、Debug类 Debug类的控制台输出及断言Assert用法。
1736 0