VS2017实用调试技巧

Posted IT莫扎特

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2017实用调试技巧相关的知识,希望对你有一定的参考价值。


历史上的第一个Bug,什么是bug

其实Bug一向有很多很多的含义,但是“计算机错误”这个含义是近来才由于计算机技术的发展而被广大人民群众所熟知的。最讨厌bug的除了女生大概就是程序猿了,但是第一个发现Bug并将它消灭的就是个程序媛——格蕾斯·哈珀,她后来成为了美国海军的一位将军。而且当年的那个Bug竟然是一个货真价实的Bug。无论如何,让我们向这位世界上第一个发现了Bug的程序媛前辈表达敬意。

对于开发人员来说,Bug是无法避免也最令人头疼的,你需要不停地Debug、不停地Debug……

Bug一词的原意是“臭虫”或“虫子”。现在,在电脑系统或程序中,如果隐藏着的一些未被发现的缺陷或问题,也称之为“Bug”,这是怎么回事呢?

第一个有记载的Bug是美国海军编程员、编译器的发明者格蕾斯·哈珀(GraceHopper)发现的。哈珀后来成为了美国海军的一位将军,还领导了著名计算机语言Cobol的开发。

1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个真正的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。

突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例”。

从此以后,人们将计算机错误称为Bug,与之相对应,人们将发现Bug并加以纠正的过程叫做“Debug”,意即“捉虫子”或“杀虫子”。

调试的重要性

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

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

现实中的你是会是这样子的吗?


拒觉迷信式调试,切不可随意猜想!!!

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

调试的基本步骤

1、发现程序错误的存在

程序出错时一般是由这三部分人发现的,程序员、测试人员、用户,程序出错的原因一般在于程序员,这时候要大胆承认自己犯下的错误,及时修改,避免结果恶化,如果程序出错,测试人员没有检查出来,最终产品发布,流向用户手里,将造成大问题

2、以隔离、消除等方式对错误进行定位

3、确定错误产生的原因

深入研究代码出错的原因,避免再犯同样的错误

4、提出纠正错误的解决办法

确定错误产生的原因后及时准备好合适的解决方案,即使处理错误

5、对程序错误予以改正,重新测试

当程序的错误解决后再进行一次测试,确定无误后交给测试人员测试

Debug和Release的介绍。

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

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

肉眼的区别

由于Debug 版本会包含一些调试信息所以整体会大一点,而Release 往往是进行了各种优化,所以会轻小许多

windows环境调试介绍

1. 调试环境的准备

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

2. 学会快捷键

最常使用的几个快捷键:

想知道更多快捷键?点我https://blog.csdn.net/mrlisky/article/details/72622009

F5启动调试,经常用来直接调到下一个断点处。
F9创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。
F10逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
F11逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最长用的)。
CTRL + F5开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

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

查看临时变量的值

设置条件断点

右击红点,点击条件选项

查看内存信息

查看调用堆栈

查看汇编信息

在调试开始之后,有两种方式转到汇编: (1)第一种方式:右击鼠标,选择【转到反汇编】:

第二种方式,点击窗口,转到反汇编

第三种方式在调试开始之后直接按住CTRL + F11转到反汇编

查看寄存器信息

CTRL + F3 查找替换


将查找到的位置进行文体替换

编程常见的错误

程序运行的过程

常见的错误分类:

编译型错误

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

链接型错误

看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。常见的错误信息:无法解析的外部符号,一般是标识符名,不存在或者拼写错误,注意红色圈起来的部分,LINK蓝色字体的出现就是链接错误

运行时错误

借助调试,逐步定位问题。最难搞,需要耐心,在这篇博客中详解了运行时错误的原因其中的一个样例《c陷阱和缺陷》中值得注意的一道题
温馨提示:

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

讲解重点: 介绍每种错误怎么产生,出现之后如何解决。

易于调试代码的模范

优秀的代码:

  1. 代码运行正常
  2. bug很少
  3. 效率高
  4. 可读性高
  5. 可维护性高
  6. 注释清晰
  7. 文档齐全 常见的coding技巧:
  8. 使用assert
  9. 尽量使用const
  10. 养成良好的编码风格
  11. 添加必要的注释
  12. 避免编码的陷阱
/***
*char *strcpy(dst, src) - copy one string over another
*
*Purpose:
*       Copies the string src into the spot specified by
*       dest; assumes enough room.
*
*Entry:
*       char * dst - string over which "src" is to be copied
*       const char * src - string to be copied over "dst"
*
*Exit:
*       The address of "dst"
*
*Exceptions:
*******************************************************************************/
char * strcpy(char * dst, const char * src) {
        char * cp = dst;
 assert(dst && src);
 
        while( *cp++ = *src++ )
               ;     /* Copy src over dst */
        return( dst );
}

讲解重点: 介绍在windows环境下使用VS2017的调试技巧,介绍每种错误怎么产生,出现之后如何解决,介绍优质的易于调试的代码规范,谢谢大家阅读。

以上是关于VS2017实用调试技巧的主要内容,如果未能解决你的问题,请参考以下文章

实用调试的技巧,VS编译器常用调试详解

VS编译器实用调试技巧

继续分享 5 个实用的 vs 调试技巧

Chrome 实用调试技巧

vs环境——C语言实用调试技巧

实用调试技巧下篇