阅读更多

7顶
15踩

研发管理

原创新闻 3 个最佳调试“工具”

2013-09-17 11:53 by 副主编 wangguo 评论(12) 有12392人浏览
在软件开发中,调试是一个必不可少的过程。借助于众多优秀的调试工具,可以让你的效率加倍。但是工具是“死”的,在你遇到瓶颈时不会为你提供额外的更有效的信息。此时,你可以借助下面的这些“工具”。

1.  你的同事

这件事情经常发生在我身上:我会花时间试图追踪问题,但在经过一番折腾还无法解决问题后,我会请同事来帮忙看看代码,他们经常会在几秒钟内指出问题。这就是所谓的情境盲区。这意味着你会经常忽视的眼前的bug,因为你已经看它很长时间了,从你的意识上就已经开始忽略它了。

你的同事还有一个宝贵的特质:他们与你是不同的。他们有不同的想法,并有一套不同的知识,也许可以帮你很快解决问题。不要羞于问别人,下一次你遇到瓶颈时,试试这种方法吧。

2.  你的创造力

这种情况也经常会发生:我编写的程序有缺陷,无法正常工作时,我就会去睡一觉,第2天早上醒来后,对于这个问题会有一个重新的认识,大部分时间都能顺利解决。

这是众所周知的,我们通常会以两种不同的方式来考虑问题:创造力和逻辑。当专注于细节(如调试一个问题),我们是100%按照逻辑来考虑,我们的思维会从想法A跳到想法B再跳到想法C,但是你的创造力可以让你通过直觉从想法A直接跳到Z。你的创造力可以让你逻辑型大脑以不同的方式来考虑问题。通过睡觉,你调用了你的创造力,然后通过另一种方式来解决问题。

3.  系统地学习

如果你不能很好地掌握你所用来解决问题的工具和API的话,那么你会发现你将陷入无休止的调试过程中。当学习一个新的系统或技术(比如Ruby on Rails)时,学习调试就等于学习系统如何工作。软件是复杂的,其每一级别的栈也是如此,而抽象隐藏了软件开发中的很多的复杂性,因此如果能够很好地理解这些抽象,可以让你的意识能够更好地去适应它。

Malcom Gladwell(《纽约客》杂志撰稿人及畅销作家)曾提出一个“10000小时定律”:只要在任何领域认真练习10000小时,每个人都能成功。经过5年全职工作经验(40小时/周 * 50周/年 * 5),你就会对你选择学习的知识有一个非常系统、深入的了解,可以帮助你轻松解决编程中遇到的一些问题。

结论

所有这些东西都有一个共同点:思考。比如调试就是在你的脑子里思考代码的执行。通过提升你的知识,并从不同的角度看问题,可以让你更有效地调试那些看似困难的问题。

英文原文:The Three Best Debugging Tools
7
15
评论 共 12 条 请登录后发表评论
12 楼 jiafuguang 2013-09-24 16:28
其实也有一定的道理,只是自己容易思维定势去理解问题,认为自己写的都是对的
11 楼 yaya_wiscom 2013-09-24 12:43
不说屁话能死啊?
10 楼 上下求索的浩 2013-09-23 16:35
其实很多代码都可以让同事帮我写,这样能发挥大家的创造力,避免我个人的盲区,真是个好办法
9 楼 ZZX19880809 2013-09-23 10:49
说了一堆屁话
8 楼 文仁126520 2013-09-22 14:56
叫同事看,确实是一个好方法啊!
7 楼 freezingsky 2013-09-20 19:37
white_crucifix 写道
写新的代码永远是最快乐的事情

如果是重复的内容,估计就吐血了!
6 楼 qiuxianxiang 2013-09-18 15:03
我觉得蛮好
5 楼 非法用户 2013-09-17 20:49
这么坑人的帖子
4 楼 white_crucifix 2013-09-17 16:20
写新的代码永远是最快乐的事情
3 楼 yangguo 2013-09-17 14:38
专门登录来踩这么没营养的帖子。
2 楼 nail2008 2013-09-17 13:50
你的同事
1 楼 ray_linn 2013-09-17 12:15
调试比编程难多了,尤其在没有源代码的情况下进行调试。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • asp.net页面生命周期详解

    主要介绍了asp.net页面生命周期的解释,大家参考使用吧

  • this.Disposed不会被触发的原因

    this.Disposed不会被触发的原因

  • ASP.NET页面事件执行过程(完整版)

    ASP.NET 母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序。对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。控件事件不会从内容页发送到母版页。同样,也不能在内容页中处理来自母版页控件的事件。

  • Page_Load与Page_PreRender的执行顺序

    原文发布时间为:2009-10-25 —— 来源于本人的百度文章 [由搬家工具导入]Page_PreRender 服务器控件将要呈现给其包含的 控件时发生。简单的理解为page中的控件渲染调用此事件Page_Load 服务器控件加载到 控件中时发生。加载控件时发生。这两个执行的顺序是Load先执行,PreRender后执行。 转载于:https://www.cnblogs.com/handbo...

  • 关于asp.net中页面事件加载的先后顺序

    一、ASP.NET母版页和内容页中的事件 母版页和内容页都可以包含控件的事件处理程序。对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。控件事件不会从内容页发送到母版页。同样,也不能在内容页中处理来自母版页控件的事件。 在某些情况下,内容页和母版页中会引发相同的事件。例如,两者都引发Init和Load事件。引发事件的一般规则是初始...

  • asp.net页面事件执行顺序

    using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using

  • Asp.net页面生命周期中的十个事件

    <br />介  绍<br />Asp.net是微软.Net战略的一个组成部分。它相对以前的Asp有了很大的发展,引入了许多的新机制。本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好、更灵活地操纵Asp.net的作用。<br />当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件。在我们试图建立Asp.net页面的时候,这个执行周期是不必去考虑的,那样只会自讨苦吃。然而,如果被正确

  • 【ASP.NET】1.ASP.NET页面事件加载顺序以及Global.asax文件的使用

    一、概述: Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法。你可以使用这个文件实现应用程序安全性以及其它一些任务。 二、如何在应用程序开发工作中使用这个文件: 1.特点: 2.内容: 3.事件执行顺序(被触发的顺序): 三、小结:

  • layui页面动态元素没有渲染出来的解决方案

    关于layui页面动态元素没有渲染出来的解决方案 本文主要介绍angluarJS与layui整合使用过程中页面加载时一些动态元素没有显示出来的解决办法。 1、首先在对应的JS文件中自定义repeatFinish指令 在js的末尾自定义repeatFinish指令,需要结合html中的repeat-finish标签来使用,用于监听列表数据渲染完毕的状态。 // An highlighted block App.directive('repeatFinish', function () { ret...

  • 使用echart的图表中:Initialize failed: invalid dom 之 dom加载出现的问题

    报错原因:Initialize failed: invalid dom 引入 因为在还没加载的时候,option 获取元素,就开始检测,并尝试去获取它,但是在vue中引用的中,发现在模板dom还没加载的时候 就已经开始执行,所以会报错 2、解决办法: 根本原因就是dom没加载,echarts没有检测到dom,那么我就让dom加载后再去获取dom,就把echarts.init()这部分数据放在onMounted里面执行,也就是挂载完成之后执行...

  • asp.net应用程序生命周期和asp.net网页的生命周期

    一、asp.net应用程序生命周期 asp.net应用程序生命周期以浏览器向web服务器(比如IIS服务器)发送请求为起点,先后经历web服务器下的ISAPI(Internet Server Application Programming Interface)扩展接收到应用程序的第一个请求并创建一个应用程序域,为每个请求创建ASP.NET核心对象(如HttpContext、HttpRequest...

  • 深入研究Asp.net页面的生命周期

    介绍 Asp.net是微软.Net战略的一个组成部分。它相对以前的Asp有了很大的发展,引入了许多的新机制。本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好、更灵活地操纵Asp.net的作用。 当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件。在我们试图建立Asp.ne

  • ASP.NET Web API 记录请求响应数据到日志的一个方法

    ASP.NET Web API 记录请求响应数据到日志的一个方法 发布时间:2012年6月12日 / 分类:ASP.NET, ASP.NET MVC / 172,745 次浏览 / 评论 REST风格的服务架构已经成为越来越多人的选择,之前我用过WCF来实现REST服务,WCF是一个很强大的框架,干这点小事有点太沉重的感觉。后来微软又推出了一个ASP.NET Web API,专

  • ASP.NET页面生命周期

    页面生命周期执行一系列步骤:页面的初始化、实例化控件、还原和维护状态、运行事件处理程序代码、呈现。为了在合适的阶段执行所需的代码,所以要对页面生命周期非常熟悉。在页生命周期的各个阶段,页面会逐个引发定义的事件,通过对代码开发,在页面的生命事件中执行我们所需要的程序页生命周期阶段 1、 页请求:发生在页面生命周期之前,用户请求页时,ASP.NET将确定是否需要分析和编译页,从而确定是否开始页面的...

  • oc中 load,initialize,init方法对比总结

    首先代码展示吧,后面也会附赠demo代码链接 1.定义测试类TestClass //为了方便打印,先在宏定义文件里面定义ZWWLog #ifdef DEBUG #define ZWWLog(fmt, ...) NSLog((@&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;%s [Line %d] &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot; fmt), __PRETTY_FUNCT

  • load 和 initialize 方法的区别;

    相同点:都是可以自动被调用的,无需手动调用;并且它们的方法实现内部都是有锁的,是线程安全的 不同点: (1)子类不实现load方法,父类的load方法就不会被调用,子类不实现init方法,父类也会调用init方法; (2)load在main函数之前被调用,不是懒加载实现的;init是懒加载,只被执行一次 (3)load是只要类所在文件被引用就会被调用,而initialize是在类或者其子类...

  • 关于page object(PO)模型的介绍

    所谓的PO就是page object,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作;至于测试脚本要和ta区别开来,需要什么去这些页面类去调用即可。这样的好处就是如果页面元素发生变化,你去维护页面类即可,测试类你基本不用管。(个人觉得理想丰满,现实骨感!)说了这么多,估计还是会有童鞋不明白,那么就看看这张图,一图胜千言这里必须再次强调,PO模型是思想并不是...

Global site tag (gtag.js) - Google Analytics