阅读更多

7顶
15踩

研发管理

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

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

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后执行。

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

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

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

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

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

  • Page_Load与Page_PreRender的执行顺序

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

  • 前端性能优化(四) 预渲染 prerender-spa-plugin

    前言 单页面应用中,整个web项目只有一个页面,使用路由机制进行组件之间的切换,动态的渲染页面内容。这就是客户端渲染,具有数据传输量小、减少服务器端压力、交互/响应速度快、前后端完全分离等优点。单页应用在优化用户体验的同时,也给我们带来了一些问题,例如对SEO不友好,首屏时间过长等。因此,服务端渲染(SSR)和预渲染(Prerender)技术应运而生。 服务端渲染与预渲染的优点 SEO:单页应用的网站内容是根据当前路径动态渲染的,html 文件初始只有<div id="app></div

  • Page_PreRender怎么落后了啊。

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

  • 页面初始化事件

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

  • 学习笔记---页面对象的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 评论, 收藏, 编辑 ...

Global site tag (gtag.js) - Google Analytics