WHAT?

调试——发现错误的一种手段

WHY?

相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在

HOW?

科学的调试方法

  • 把错误的发生稳定下来:假设-证实/证伪
  • 确定错误原因:二分法

同他人讨论问题

忏悔式调试

抛开问题,休息一下

修正问题

  • 动手之前先要理解问题
  • 理解程序本身,而不仅仅是问题
  • 验证对错误的分析
  • 放松一下
  • 治本,而不是治标
  • 修改代码时一定要有正确的理由:不要随机地修改代码,在没有理解代码时对她做的改动越大,你对她能正确工作的信息就越低
  • 检查自己的改动:code review
  • 增加对应的单元测试
  • 搜索类似的缺陷:如果你想不出如何查找类似缺陷,说明你对程序的理解程度还不够

编译器的警告信息

  • 不要忽略编译器提出的任何警告信息:做编译器的人对于你所使用的语言的理解要远远胜于你自己
  • 用对待错误的态度来处理警告
  • 在项目组范围内使用统一的编译设置:统一的编译配置文件或编译脚本

《Code Complete》ch.23 调试的更多相关文章

  1. VS Code - Debugger for Chrome调试JavaScript的两种方式

    VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...

  2. VSCode调试Html中的脚本 vscode前端常用插件推荐,搭建JQuery、Vue等开发环境 vsCode 添加浏览器调试和js调试的方法总结 VS Code - Debugger for Chrome调试js

    一.背景 使用Visual Studio Code写了一个简单的Html页面,想调试下其中script标签里的javascript代码,网上查了一通,基本都是复制粘贴或者大同小异的文章,就是要安装De ...

  3. 使用VS Code 从零开始开发并调试.NET Core 应用程序

    最新文章:http://www.cnblogs.com/linezero/p/VSCodeNETCore.html 使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试. 上一 ...

  4. code complete part1

    最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多 ...

  5. visual studio code(vscode) 调试php(转)

    原文链接:http://www.cnblogs.com/CLR010/p/5276077.html visual studio code(vscode) 调试php   1.下载vscode (vis ...

  6. 重读 code complete 说说代码质量

    重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...

  7. Code Complete 读后总结和新的扩展阅读计划

    Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...

  8. 《Code Complete》ch.24 重构

    WHAT? 重构(refactoring),Martin Fowler将其定义为“在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改”. WHY? 神话:一个管理很完善的软件 ...

  9. 《Code Complete》ch.21 协同构建

    WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...

随机推荐

  1. [mysql] MariaDB 10.0.10 GTID复制

    一:概念理解:    1.TID:Transaction ID,即Mysql服务器的事务ID号. 2.GTID:Global Transaction ID,全局事务ID,在整个主从复制架构中任何两个事 ...

  2. $(function(){})和$(document).ready(function(){})

    document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...

  3. java读取properties文件的内容

    获得properties文件中某个key对应着的value // 路径名称 + properties的名称,不要“properties” private static final String BUN ...

  4. 【转】ODBC、OLE DB、 ADO的区别

    一.ODBC ODBC的由来 1992年Microsoft和Sybase.Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库.随后ODBC便获得了许多数据库厂商和 ...

  5. android 插件化开发 开源项目列表

    开源的插件化框架 Qihoo360/DroidPlugin CtripMobile/DynamicAPK mmin18/AndroidDynamicLoader singwhatiwanna/dyna ...

  6. activiti自定义流程之Spring整合activiti-modeler5.16实例(六):启动流程

    注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring ...

  7. Ignoring HTTPS certificates

    Our Development setups won't have valid or trusted certificates. When do you want test our webserver ...

  8. SpringMVC4.0.3 @ResponseBody JSON 中文乱码问题

    @RequestMapping(value="listUserJson.html",produces="text/html;charset=UTF-8") @R ...

  9. Unix_Linux系统定时器的应用(案例)

    2014-05-05 Created By BaoXinjian

  10. PLSQL_性能优化系列11_Oracle Bulk Collect批处理

    2014-10-04 Created By BaoXinjian