阅读更多

7顶
15踩

研发管理

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

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

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

  • Page_PreRender解惑

    今天跟踪了Page_Load(代号1)、Page_PreRender(代号2)、Button1_click(代号3)三者,看其执行顺序页面初始化时,执行顺序为:1------》2当点击Button1按钮时,页面的执行顺序为:1------》3------》2以上为本人实践所得,欢迎点评。

  • ASP.NET中Page_Load与Page_PreRender事件。

    Page_PreRender 服务器控件将要呈现给其包含的 Page 控件时发生。简单的理解为page中的控件渲染调用此事件Page_Load 服务器控件加载到 Page 控件中时发生。加载控件时发生。这两个执行的顺序是Load先执行,PreRender后执行。

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

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

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

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

  • 关于 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...

  • 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

  • Page_Load与Page_PreRender的执行顺序

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

  • Page_PreRender怎么落后了啊。

    在一个有formview页面中最初的显示是:form_dataBound--page_load-------Page_PreRender点UPDATE后,page_loadP----》age_PreRender-----》form_dataBound 

Global site tag (gtag.js) - Google Analytics