当你习惯了测试驱动的开发(Test-Driven Development,TDD)之后,你会发现自己越来越少地使用调试器(debugger)——如果你发现程序里有什么问题,你不应该用调试器去抓bug,而是应该用一个单元测试用例来揭示问题的所在。由于存在细粒度、完整覆盖的单元测试用例,每个bug都相当清晰,于是很少会需要各种巧妙的调试手段了。
——————————
Uncle Bob's Software Craftsmanship Corner
Debuggers are a wasteful Timesink
by Robert C. Martin
November 29, 2003
Summary
As debuggers have grown in power and capability, they have become more and more harmful to the process of software development.
Debuggers have become immensely powerful. A good debugger is a very capable tool. With it, an experienced developer can step through very complex code, look at all the variables, data structures, and stack frames; even modify the code and continue. And yet, for all their power, debuggers have done more to damage software development than help it.
Since I started using Test Driven Development in 1999, I have not found a serious use for a debugger. The kinds of bugs I have to troubleshoot are easily isolated by my unit tests, and can be quickly found through inspection and a few judiciously placed print statements.
I teach a lot of classes in C++, Java, C#, TDD, XP, Patterns, etc. In those classes I often have the students write code. It is not unusual for me to find a student with his or her nose buried in a debugger, painstakingly stepping from line to line, examining variables, setting breakpoints, and generally wasting time. The bug they are tracking could be found through simple inspection of the code.
I consider debuggers to be a drug -- an addiction. Programmers can get into the horrible habbit of depending on the debugger instead of on their brain. IMHO a debugger is a tool of last resort. Once you have exhausted every other avenue of diagnosis, and have given very careful thought to just rewriting the offending code, *then* you may need a debugger.
分享到:
相关推荐
3. **故障排查**:在开发过程中,如果遇到程序运行错误或者设备异常,USB调试器可以帮助开发者查看单片机的运行日志,追踪并定位问题。 4. **在线调试**:某些高级的USB调试器支持硬件断点、单步执行等功能,使得...
滴水单机VT调试器是一款专门针对虚拟化技术(VT,Virtualization Technology)进行调试的工具,对于软件开发者和系统管理员来说,它是一款极其宝贵的资源。"不可多得"的标签暗示了这款调试器在行业内具有较高的专业...
通过研究"OD调试器源码",我们可以提升对操作系统内核、程序执行原理以及逆向工程的理解,这对于开发自定义调试工具、优化调试过程或者进行安全分析都有极大帮助。同时,"MyDbg"可能是这个源码的编译版本,供实际...
在使用Visual Studio 2010 (VS2010) 进行Web应用程序开发时,有时会遇到一个常见的问题,即"未能将脚本调试器附加到计算机上的进程。已附加了一个调试器"的错误。这个错误通常发生在尝试调试在IE10浏览器中运行的...
《Windows简单调试器源码解析》 Windows调试器是一种强大的工具,用于检查、分析和调试运行中的应用程序。这里我们关注的是一款约2700行代码的简单调试器,名为MyDbg。这款调试器虽然相对简洁,但却包含了调试器的...
蓝牙调试器是一款强大的移动应用程序,专门设计用于通过蓝牙技术进行设备间的数据传输和控制。它在Android平台上运行,为开发者和普通用户提供了一种便捷的方式来测试和调试蓝牙功能。这款APP适用于各种场景,如...
本资源“qt msvc 调试器 cdb.rar”关注的是Qt框架在MSVC(Microsoft Visual C++)环境下如何配置和使用调试器。在VS2015或2017中,Qt的安装并不会自动包含调试工具,因此我们需要单独安装调试器。这个压缩包包含了...
《DLT/645规约 97/07通信协议调试器详解》 在电力自动化领域,通信协议的调试是确保系统稳定运行的关键环节。DLT/645规约,全称为《多功能电能表通信协议》,是电力系统中广泛应用的一种通讯标准,特别是在电能计量...
QTP脚本调试器是QTP中的一个重要组件,它允许用户在执行自动化测试脚本时进行单步调试,查找并解决可能出现的问题。下面将详细介绍QTP脚本调试器的使用及其相关知识点。 1. **脚本编辑器**: QTP的脚本编辑器是...
vt框架使用的airhv,增加了自建调试体系部分 ept hook. 无痕int3. 自建调试体系隐藏debugport. 支持pdb符号自动下载,省去寻找特征码步骤,轻松兼容不同系统版本. 5.zip文件是编译好的成品 支持平台 win10 x64 intel ...
【MyDebug调试器源码分析】 MyDebug是一个简单的命令行调试器,它的源码提供了深入理解调试原理和实践的机会。这个调试器虽无图形用户界面,但通过控制台交互,实现了多个关键功能,包括查看汇编代码、地址跳转和...
本文旨在详细介绍如何在MPLAB® X IDE中使用PICKit™ 3在线调试器,包括安装过程、目标连接器引脚排列、创建项目、编译与运行项目等方面的内容。 #### 二、准备工作:安装最新的软件 - **下载与安装**:首先从...
如果当前工程的某些属性存在变化,在新建工程、打开工程或者退出程序时,Windows批处理调试器会提示你是否保存当前工程。没有“工程另存为”选项。你可以通过复制.bdc文件来模拟这个功能。.bdc文件是JSON文本格式,...
1. **备份数据**:在进行固件更新之前,最好备份调试器中的任何重要数据,以防更新过程中发生意外。 2. **断电安全**:在固件更新过程中,切勿切断电源或强制断开设备,以免损坏调试器。 3. **技术支持**:如果在...
总结网上的安装经验,并且结合自身的安装过程总结的经验,提供一个安装好VS2008, QTCreat后不能使用QTCreat调试的解决方案,并提供当前我使用的安装包,如果需要更新可以到我提供的网站上下载最新的安装程序
2. 现场安装调试:在安装过程中,调试器可以帮助解决通信问题,确保电能表能正确接入数据采集系统。 3. 故障排查:当电能表出现通信异常时,调试器能快速定位问题,提高故障处理效率。 总结来说,DLT645-2007多功能...
VC DES算法代码调试器,可清楚的查看DES加密的算法代码,可查看DES加密过程中生成的Ki,Li,Ri,Fi,Si等,可看成是一个DES加密对照器,方便使用者在加密过程中发现错误,及时纠正代码。
Mstar USB调试器驱动是专为Mstar(晨星半导体)芯片组设计的一款重要的软件工具,主要用于帮助开发者和工程师在Windows操作系统环境下对基于Mstar芯片的设备进行调试和测试。这款驱动程序支持多种Windows系统,包括...
gDEBugger是OpenCL和OpenGL高级的调试器,分析器和内存分析器。它可以追踪在OpenCL和OpenGL之上的应用程序的活动,并发现系统内部的活动。 gDEBugger是一个高级的OpenCL和OpenGL调试器,分析器和内存分析器。它可以...
这样可以使用GDB等源码级调试器进行调试,查看函数调用、堆栈信息等。 7. **错误处理和异常捕获** 使用`BEGIN...EXCEPTION`块来捕获和处理存储过程中的错误,这在调试时非常有用,因为它可以帮助定位错误发生的...