【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

调试器有害吗?

  • 2007-10-23
  • 本文字数:1590 字

    阅读完需:约 5 分钟

Giles Bowkett 在《 Debugger Support Considered Harmful 》中写道:

问 Ruby 为什么没有很好的调试器支持,就像问海豚为什么没有鳃一样。Ruby 没有很好的调试器支持,是因为 Ruby 程序员不应该使用调试器。Ruby 比任何其他语言(可能除 Smalltalk 之外)都更好地支持 TDD 和 BDD。调试器支持是不能优雅地运行测试的语言才需要的。

注释:TDD 是指"测试驱动设计/开发(Test Driven Design/Development)",BDD 是指"行为驱动开发(Behaviour Driven Development)"。

这篇文章引起了很大的反响,其中有许多是来自 Smalltalk 社区。这点尤其相关,因为 Smalltalk 和 Ruby 是近亲。Cincom System 的 James Robertson ,甚至录了一段截屏视频(Sceencast),来说明 Smalltalk 调试器在进行 TDD 时的用处:

我写了一个测试,并运行它。测试失败了。我调试测试,让调试器替我创建漏掉的方法——于是我在调试器中给该方法编写代码,并再次运行它。调试器并不是一件不该过于依赖的工具:它把 TDD 提升了一个层次。

Avi Bryant——Smalltalk Seaside Web 框架的创建者,说:

Giles 忽略的一点是,你首先怎样去理解代码。要想理解代码——无论是你写的,还是其他人写的——没什么比得上调试器中逐步跟踪一遍。既然 Giles 曾经是一位剧作家,或许可以这样比喻:阅读代码就像阅读一部电影剧本。编写测试可能就像在描绘故事板(它们帮助你将最终的产品形象化)。而使用调试器就像实际观看这部电影。有了调节轮,你就可以一帧一帧慢慢看。

Blaine Buxton 提出了调试器角色的另一种观点:

当你正好在试验一种新的框架,并想观察它是如何工作的时候,调试器在检测程序方面就非常棒。我喜欢一行行地跟踪。我在学习 Seaside 的时候就是这么做的,它比任何文档都更好。此外,看着漂亮的代码在你的调试器中展开,简直就像在阅读一本好书。在处理一些难看的代码时,调试器会给我展示出在我看代码时被眼睛所蒙骗了的一些东西。如果动物活着的时候就能观察各器官是如何工作的,我为什么要解剖它的尸体呢?

Ben Matasar 认为"调试器"这个名称可能是问题的根源:

我认为"调试器"这个名称让人们对它的作用产生了误解,至少在 Smalltalk 是这样。当我去年 12 月刚接触 Smalltalk 的时候,我尽力不用调试器,我的确认为它是一件不该过于依赖的工具。现在我时刻用它来作为研究代码的支撑点。事实上,我直接在调试器中编写相当多的代码,而让 Web 浏览器呆在后台,等待我发送响应。 我现在把它当作是一种方法上下文浏览器,在这里,你在调用堆栈的每一步中都有一个活动的 REPL。这样很好,因为你可以发送消息给对象,捅捅它们,然后观察它们如何对消息做出响应。

因此,传统的调试器工具允许你通过断点或者在任意时间中止执行,并允许你查看当前的状态。它与其他工具一起,帮助开发人员理解系统在运行时实际上是如何表现的——与只查看源代码相对照。同类的工具还包括覆盖工具(coverage tools)(如 rcov )、剖析器(profiler)、跟踪器(tracer)或者日志记录器(logger)。

虽然 Giles 的文章认为 Ruby 缺乏调试器支持,但我们不太确定他指的是什么。Ruby 拦截器具有调试器支持,既有用 Ruby 编写的较慢的版本,也有像 ruby-debug 这样的快速版本。JRuby 的情形也一样,快速版的方案( jruby-debug )目前正在开发当中。其他的 Ruby 实现,如 Rubinius 具有低开销的调试,也有的使用底层的 VM 调试支持。

当然,调试器实现只是一个方面——还必须有调试器的用户界面。但是这在 Ruby 领域中也不缺。所有主要的现代 Ruby IDE 都支持调试。 RDT(现在是 Aptana 的一部分)已具有调试支持多年了——最新的 NetBeans 调试支持与RDT 源自相同的代码。Eclipse DLTK Ruby 具备调试支持,其他非 Java 的 IDE,如 Sapphire Steel 公司的 Ruby in Steel IDE Komodo 等等也都一样支持调试。

你在调试 Ruby 方面又有什么经验呢?

查看英文原文: Debuggers considered Harmful?

2007-10-23 12:13801

评论

发布
暂无评论
发现更多内容

区块链技术驱动:IM加密通讯App与DApp商城挖矿新体验

西安链酷科技

区块链社交软件开发

区块链挖矿系统:数字资产交易的新引擎

西安链酷科技

交易所开发 质押挖矿

用海外云手机做tiktok怎样保障安全性?

Ogcloud

云手机 海外云手机 tiktok云手机 国外云手机 tiktok运营

淘宝/天猫API接口:轻松获取商品详情原数据

技术冰糖葫芦

如何在 Windows 上安装 SQL Server,保姆级教程来了!

霍格沃兹测试开发学社

淘宝/天猫按关键字搜索API:返回值详解,轻松获取商品信息

技术冰糖葫芦

api 货币化 API 接口 API 文档 API】 pinduoduo API

云算力挖矿模式:远程挖矿的新选择

西安链酷科技

云挖矿系统开发 算力挖矿 质押挖矿app

企业规模扩大,SD-WAN实现跨省快速组网

Ogcloud

网络协议 网络加速 SD-WAN 企业组网 SD-WAN组网

如何在 Windows 上安装 SQL Server,保姆级教程来了!

霍格沃兹测试开发学社

Python 中删除文件夹下文件的方法详解

霍格沃兹测试开发学社

Python 字符串格式化指南

霍格沃兹测试开发学社

解锁DApp商城新纪元:质押挖矿系统引领未来金融

西安链酷科技

dapp开发 区块链商城开发 im即时通讯软件开发

撮合交易系统软件定制开发:打造高效、稳定的金融交易平台

西安链酷科技

撮合交易系统 otc承兑商

使用 Dockerfile 构建和定制 Docker 镜像

霍格沃兹测试开发学社

区块链赋能:打造安全无忧的IM加密通讯App

西安链酷科技

im通讯开发

​腾讯云异构计算平台全面支持Llama 3,助力一键部署、性能翻倍

Geek_2d6073

IM即时聊天通讯App革新:区块链技术加持下的加密新篇章

西安链酷科技

im区块链加密通讯开发

管理者如何在团队里讨论敏感话题

伤感汤姆布利柏

区块链DApp商城:质押挖矿系统,开启财富增长新路径

西安链酷科技

区块链社交软件

信创发展到现在技术上有什么关注重点

Onegun

信创 信创产业 信创化

探索DApp商城挖矿新领域:区块链聊天通信软件app技术下的质押挖矿系统

西安链酷科技

区块链通讯app

企业未来都会用上云原生开发工具吗?它有什么优势

Tp_jh

AI 云原生 K8s 多集群管理

ETL中元数据处理的方式

RestCloud

数据处理 元数据 ETL 数据集成

探索云算力平台:共享挖矿与众筹挖矿的差异

西安链酷科技

云算力挖矿系统开发

IM加密通讯聊天软件App开发新趋势:区块链技术助力通讯安全升级

西安链酷科技

im区块链聊天软件开发 通讯聊天软件开发

CentOS 系统常用命令详解

霍格沃兹测试开发学社

助力数智化转型:使用检索增强生成【RAG】构建物业行业大模型

智在碧得

深度学习算法 AI大语言模型 大语言模型 人工智能深度学习 #大模型

区块链挖矿与云算力技术开发的融合:未来挖矿的新趋势

西安链酷科技

dapp开发 区块链挖矿系统发掘 合约软件开发

如何通过代理服务器加速您的网站浏览体验

摘星星的猫

IM加密通讯App与DApp商城质押挖矿:双重安全,双重收益

西安链酷科技

区块链通信app开发

EMQX Platform 产品发布会回顾:全球部署与无缝数据集成,驱动汽车行业智能化转型

EMQ映云科技

mqtt mqtt broker

调试器有害吗?_Ruby_Werner Schuster_InfoQ精选文章