目录

  • 历史上的第一个Bug,什么是bug
  • 调试的重要性
  • 现实中的你是会是这样子的吗?
  • 调试的基本步骤
    • 1、发现程序错误的存在
    • 2、以隔离、消除等方式对错误进行定位
    • 3、确定错误产生的原因
    • 4、提出纠正错误的解决办法
    • 5、对程序错误予以改正,重新测试
  • Debug和Release的介绍。
    • 肉眼的区别
  • windows环境调试介绍
    • 1. 调试环境的准备
    • 2. 学会快捷键
    • 3、调试的时候查看程序当前信息
      • 查看临时变量的值
      • 设置条件断点
      • 查看内存信息
      • 查看调用堆栈
      • 查看汇编信息
      • 查看寄存器信息
      • CTRL + F3 查找替换
  • 编程常见的错误
    • 编译型错误
    • 链接型错误
    • 运行时错误
  • 易于调试代码的模范

历史上的第一个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实用调试技巧相关推荐

  1. C语言:实用调试技巧

    目录 C语言:实用调试技巧 1.什么是bug? 2.调试是什么?有多重要? 3.debug和release的介绍 4.Windows环境调试介绍 5.一些调试的实例 6.如何写出好(易于调试)的代码 ...

  2. C语言之实用调试技巧

    什么是bug? 调试是什么?有多重要? debug和release的介绍. windows环境调试介绍. 一些调试的实例. 如何写出好(易于调试)的代码. 编程常见的错误. 一. 什么是bug? 第一 ...

  3. C语言第二十课:实用调试技巧

    目录 前言: 一.Bug: 二.调试: 1.调试是什么: 2.调试的基本步骤: 3. Debug 与 Release : 三.在Windows环境下进行调试: 1.调试环境的准备: 2.调试的快捷键: ...

  4. 实用调试技巧 Debug Release F10 F11 初始化 越界访问 堆栈 模拟实现库函数

    目录 一.什么是bug 二.调试是什么?有多重要? 1.调试 2.调试的基本步骤 三.Debug和Release 四.windows环境调试介绍 1.调试环境的准备 2.学会快捷键 Ctrl+U 改大 ...

  5. ACM/OI中C++常用优化(实用/调试/技巧)代码(语法)

    一.C++万能编译头文件 #include<bits/stdc++.h> 从 #include <iostream> #include <cstdio> #incl ...

  6. C语言初阶——实用调试技巧

  7. 【C语言】实用调试技巧与const函数提升代码健壮性

    作者简介:大家好我是狂暴于涛侠

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

    实用调试技巧 文章目录 实用调试技巧 什么是bug? 调试是什么?有多重要? Debug和Release的介绍 windows环境调试介绍 一些调试的实例 如何写出好的代码 const 什么是bug? ...

  9. Javascript调试技巧整理

    整理一下网上看到的实用调试技巧! 1. 不要使用alert 首先,alert只能打印出字符串,如果打印的对象不是String,则会调用toString()方法将该对象转成字符串(比如转成[object ...

最新文章

  1. mysql 数据表 时间自动_MySQL数据库时间设置自动添加时间和自动更新时间
  2. 查询最近一千条数据mysql_保留mysql数据库中的最新1000条记录
  3. flask连接不到mysql数据库,即使使用了python flask mysql,也无法将数据提交到数据库(使用python flask mysql)连接.提交()...
  4. 用咨询的角度去实施软件项目
  5. 译 | 将数据从Cosmos DB迁移到本地JSON文件
  6. P5748-集合划分计数【EGF,多项式exp】
  7. c 11 主要的新语言特性,C 11系列
  8. word2vec字向量_Anything2Vec:将Reddit映射到向量空间
  9. 设计模式 ( 十二 ) 静态代理模式
  10. 影视小程序v20首发源码
  11. 计算机模拟数学建模,计算机模拟数学建模
  12. openCV 中值滤波算法解析
  13. 计算机键盘无法输出,为什么键盘指示灯亮着却不能打字
  14. windows优化大师怎么用_操作系统不仅有XP、win7和win10,这些更好用的系统你都用过吗...
  15. linux进程关系图谱
  16. 惠普总裁口述的职业规划(3)
  17. 牛逼哄哄的京东 JD-hotkey !
  18. java开发级别t4,腾讯技术等级T系列解读,T4等于百万年薪加股份
  19. latex写中文毕业论文(北交大博士毕业论文模版)
  20. 第八期杭州NodeParty x Rokid技术分享会回顾

热门文章

  1. 【转摘】在Word中使用SmartArt绘制组织结构图
  2. 数据分析实习-业务题准备
  3. 棋盘放芝麻:有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量(代码)
  4. Nginx页面报错404及解决办法
  5. sitemap生成工具
  6. Java EE架构师认证
  7. hive表信息查询、查看表结构、表操作等
  8. 计算机毕业设计Java个人理财系统(源码+系统+mysql数据库+lW文档)
  9. 建造者(Builder)模式
  10. 遍历日历 LocalDate