阅读更多

7顶
15踩

研发管理

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

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

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 类提供的。接下来被...

  • 前端性能优化--预加载技术

    当我们谈到前端的性能时,总是会提到比如合并、压缩、缓存或者在服务器上开启gzip之类的,目的都是为了让页面加载的更快。 资源预拉取(prefetch)则是另一种性能优化的技术。通过预拉取可以告诉浏览器用户在未来可能用到哪些资源。 Pre-fetching会提示浏览器那些未来一定或可能使用到的资源,有时在当前页面见效,有些则在未来可能打开的页面生效。 作为开发者,我们比浏

  • 记不住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...

  • 关于 Web 应用的 Prerender 策略

    因此,如果你将所有这些路由都重定向到根目录下的index.html文件,页面在加载时会感觉很不好,用户会看到错误页面的骨架,直到它完成加载并替换布局。不过,需要注意的是,由于这不是服务器渲染,因此此时没有用户特定的数据可以显示,只是以静态文件的形式直接发送第一个请求。其原因是,在单页应用中,需要将所有的请求都重定向到根文件,然后框架通过内置的路由系统将用户重定向到相应的页面。为了让预渲染解决方案发挥作用,你需要告诉你的代理某些路由需要特定的文件,而不是总是根目录下的index.html文件。

  • Prerender预渲染优化SEO

    单页面应用的主要内容都依赖于JS的执行,当其首页面下载下来的时候,其实不是完整的页面,而是HTML + JS文件,浏览器提供执行环境于是页面被渲染了出来。用户在访问的时候体验会很好,但是对于搜索引擎的爬虫就不太友善了,因为他们不能执行JS,这时候Prerender就派上用场了,它可以帮忙把页面渲染完成之后再返回给爬虫工具,我们的页面也就能被解析到了。最近我尝试搭建了基于本地的Prerender

  • 关于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,做个补充,看看页面初始过程到底是怎么样的下面是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页面生存周期

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

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

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

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

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

  • 页面初始化事件

    <script> window.onload( function(){ alert('hello'); }()); </script> $(document).ready(function(){ }) //可以简写成 $(function(){ });    window.onload不能同时编写多个,如果有...

  • page_load获取get或者post的值

    获取数据使用HttpContext.Current.Request.Form["UserName"]

Global site tag (gtag.js) - Google Analytics