阅读更多

7顶
15踩

研发管理

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

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

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
调试比编程难多了,尤其在没有源代码的情况下进行调试。

发表评论

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

相关推荐

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

    this.Disposed不会被触发的原因

  • ASP.NET 2.0 页面生命周期的PreRender事件

    学习了《ASP.NET 2.0 揭秘》,用自己的理解说,ASP.NET 2.0 的页面生命周期就是Web页面发生了从开始到结束的一系列的事件。而这些事件中只有两个事件需要处理:Page_Load事件和PreRender事件,控件事件发生在两者之间,所以,可以把编程式数据绑定的代码写在PreRender中: protected void Page_PreRender(objec...

  • Asp.Net WebForm生命周期的详解

    一.Asp.Net页面生命周期的概念 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程序类后,ASP.NET运行时将调用处理程序的 ProcessRequest 方法来处理请求、创建页面对象。通常情况下,无需更改此方法的实现,因为它是由 Page 类提供的。接下来被...

  • 记不住ASP.NET页面生命周期的苦恼

    介绍 对于ASP.NET开发者,理解ASP.NET的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法(method)非常困难。互联网上有很多关于页面生命周期内部机制的文章,所以本文只准备简单覆盖技术的基础部分,更主要的目的是给大家提供一个简单得记忆页面生命周期的方法。 准确的记忆ASP.NET页面生命周...

  • 前后端分离:WebAPI+Vue开发——跨域设置

    前后端分离:WebAPI+Vue开发——远程数据请求axios 前后端分离:WebAPI+Vue开发——跨域设置 前后端分离:WebAPI+Vue开发——身份认证 本文采取的策略是“跨域资源共享-Cross Origin Resource Sharing(CORS) ”。 一般情况下,前端和后端在两个项目中,在部署的时候就要部署在两个域名下,如前端域名:http://www.abc.com...

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

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

  • OnPreRender事件常见用法

    protected override void OnPreRender(EventArgs e) 1) 加入脚本 protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); this.Page.RegisterClie...

  • 前端事件系统(三)

    上一章对于jQuery的事件系统,对于jQuery的一些事件绑定接口做了分析。同时,引入了事件委托的概念。那么,从本章起,将开始深入到jQuery的事件系统内部,对于其源码进行解析。 这一篇是可以独自拿出来看,与前面两章虽然有些关系,但是如果只是对于jQuery源码有兴趣的,并且对前端事件有些理解的,从这章开始看也是可以的。 前端事件系统(一) 前端事件系统(二) on方法 上一章提...

  • asp.net 生命周期

    网上找了一下,然后摘录整理了一下asp.net的生命周期,比较详细的。 一.Asp.Net页面生命周期的概念  当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程序类后,ASP.NET运行时将调用处理程序的 ProcessRequest 方法来处理请求、创建页面对象。通常情况下,无需更改...

  • Asp.net页面生存周期

    # 事件或方法 功能 描述    1 Init 事件 页面初始化 初始化设置。    2 LoadViewState 方法 加载视图状态 填充ViewState属性。    3 LoadPostData 方法 处理回发数据 处理传入窗体数据。    4 Load 事件 加载页面 页面控件初始化完成并反映了客户端的数据。    5 RaisePostDataChangedEvent 方法

  • ASP.NET页面生命周期描述

    在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET,做个补充,看看页面初始过程到底是怎么样的下面是ASP.NET页面初始的过程:1. Page_Init();2. Load ViewState;3. Load Postback data;4. Page_Load();5. Handle control events;6. Page_PreRender();7. Page

  • Asp.Net底层解析(三)——ASPX页面的生命周期详解

    前言:个人认为,对于页面生命周期的理解是开发人员在ASP.NET领域做好做深的前提。当然,因为微软已经将ASP.NET封装得很简单了,所以对于只有基本html&javascript的初学者来说也很容易上手,这对于初入门者来说无疑是一件好事。何况如果仅仅要求会使用的话,何必要知道太多的深层次的技术细节?就算需要知道,也无需一开始,等到有了一定的使用经验再去了解,无疑会事半功倍。然而,当使用ASP.N

  • 学习笔记---页面对象的11个事件, 其中InitComplete-PreLoad之间和Load-LoadComplete之间的时间点, 很关键...

          转自别人的, 加上用户控件的顺序:  转自: http://www.cnblogs.com/kvspas/archive/2012/01/03/webform-master-control.html   WebForm中搭配母版页和用户控件页时候的事件加载顺序,附测试程序 2012-01-03 00:56 by 梁逸晨, 1042 阅读, 0 评论, 收藏, 编辑 ...

  • 页面事件(Init,Load,PreRender)执行顺序

    页面事件(Init,Load,PreRender)执行顺序 Init,Load,PreRender事件执行顺序:1)控件的Init事件2)控件所在页面的Init事件3)控件所在页面的Load事件4)控件的Load事件5)控件所在页面的PreRender事件6)控件的PreRender事件规律:1)Init事件从最里面的控件(包括用户控件及普通控件)向最外面的控件(页面)引发,Load及PreR

  • ASP.NET页面生命周期

    声明:此文转载自http://www.lxzhu.net/blogcn/tags/life-cycle(太初有道)。 在Asp.NET WEB FORM的开发中,页面的生命周期以及生命周期中的主要事件是无法忽略的。页面生命周期的详细解释可以参考MSDN – ASP.NET Page Life Cycle Overview 。这篇文章比较长。下面的内容是我阅读这篇文章之后的摘要。主要都是开发过程中

  • .net MVC, webAPI,webForm集成steeltoe+springcloud实现调用服务中心服务的总结

    开始之前,如果没接触过Autofac的,可以移步到Autofac官方示例学习一下怎么使用:https://github.com/autofac/Examples .net 下集成steeltoe进行微服务客户端的注册与发现均需要使用Autofac依赖注入方式进行,且MVC,WebAPI,webForm三种项目类型所需要依赖扩展库都不一样,经过两周的踩坑,现在做个粗浅的总结吧! 以下是steel...

  • window.onload=init()和window.onload=init

    任务中遇到了需要在网页加载完成时触发的事件,用window.onload=init();时出现了方法无法调用出错问题,把括号去掉之后问题就解决了。

Global site tag (gtag.js) - Google Analytics