写点什么

Google SoC 系列: 基于 Web 的 Rails 调试器

  • 2007 年 4 月 27 日
  • 本文字数:1776 字

    阅读完需:约 6 分钟

Rails 调试工具已经存在很长时间了。最简单的方法是在你的代码中放置

breakpoint

代码;当这一行被执行时,Rails 允许将 irb(Ruby 的交互式 shell)缚到 Rails 进程上,以查看系统。其他工具、IDE 也都开始提供 Ruby 与 Rails 的调试支持以及 Ruby 调试器的 GUI 前端。 Eugen Minciu 创建了一个 Google Summer of Code(SoC)项目,以改进有关调试 Rails 的工作流程。InfoQ 第一时间从 Eugen 那儿了解到了他的计划细节。当被问到该项目的概观时,Eugen 表示:

正如我的项目摘要所指出的,这个项目致力于增强 Rails 应用的调试能力。我对开发一个完整的 Ruby 调试器没有兴趣,因为有些项目已经涉及了这一题目。相反,我想要在浏览器上创建调试会话。这也是在为 Rails 调试过程中普遍遇到的断点问题找到一个解决方案。因此,我想创建一个基于 Web 的调试会话,可以让开发者在发生任何错误事件时检查变量。此外,无论何时,只要你的 Rails 应用在执行过程中遇到了一个异常或设置的断点,你都将自动地获得这样一个会话(或至少是一个连接到该会话的链接)。这是我玩 Lisp 时得到的灵感,Lisp 可以在程序一遇到错误时就立即让你检查。这是一个很好的工作流程,我在做 Rails 应用时也想拥有同样形式的工作流程。

当被问到如何部属这种工具时,Eugen 说到:

“后端”(the part that enables the Binding.of_caller,激活 Binding.of_caller 的部分)应该以 gem 方式提供,因为它用途广泛,即便你不想把它集成到你的应用中,它也可以提供给其他应用使用。我更喜欢把其打包成一个 gem,因为这样,开发者在一台机器只需下载一次(更新一次),而无需在同一台为每个应用都下载一次。可是,如果这不可行的话,我将把该项目的“前端”部分做成一个插件。

解释一下, Ruby 的 Binding 类对象封装了 Ruby 代码的上下文。“Binding”是一个计算机术语,是符号 / 名称对应到具体对象的一种映射。调用捕获与维护 binding 的专用方法,或者只是简单的调用获取 binding 的专用方法,对调试器这样的工具来说都是必须的。例如,调试器使用这些方法来显示挂起程序的调用栈,以及允许检查方法栈帧的变量等操作。

提到基于 Web 的 Rails 调试,已经有一个叫做 Gyre 的项目了。Gyre 是一个以 Web 应用方式实现的 IDE。它允许在浏览器中查看 Rails 应用程序的源码,并很容易设置断点。它目前还处于 alpha 版本阶段。Eugen:

我必须承认,直到最近我才听说 Gyre,我找到了它并看过界面,它看起来很漂亮。可是,将 Web 应用的运行与调试分开这种工作流程听起来不怎么好,而且通过浏览器设置断点这种功能并不是一个能真正打动我的很酷的事情。但 Gyre 的控制台看起来确实相当漂亮,我得看看它是怎么实现的,做自己这个项目过程中,我很愿意与更多的人员交流,我会和他们联系的。

这个项目第一步将在类似于“Try Ruby”的平台上进行工作。“Try Ruby”是 Ruby irb 一个基于 Web 的版本,可以快速体验 Ruby 代码。Eugen:

它能很好地提供一些基于 Web 的 GUI 来控制应用程序执行流(单步跟踪,watch 等等),同时也能在同一屏幕的某个单独区域看到源码。我已经考虑过可行性,但要等到我完成类似 irb 控制台的功能后再来考虑这个问题。

有些想法可能来自 Smalltalk Seaside 这个 Web 框架。Seaside 允许用 HTML GUI 组件编制程序,允许组件在调试时具有特殊的上下文菜单(“Halos”),以便检查组件的状态。但这对 Rails 来说或许是不可能的,Euge 对这些想法报以开放的态度:

至于像 Seaside halos 这样的东西……我不知道,我不能想象它是怎么实现的。Seaside 在 Web 应用框架上走的是截然不同的方向。Rails 没有像“组件”那样的东西,所以我不知道如何为视图的各个不同部分提供一个特殊的上下文菜单。每个视图有一个上下文菜单是很挺好,但是我还没有想过要往这些菜单里放些什么。不过我很乐意尝试来自任何人的任何想法。

Eugen 的博客可以看到这个项目进展情况。

查看英文原文: Google SoC Series: Web-based Rails Debugger - - - - - -

译者简介:宋玮,多年软件开发经验,从 2002 年开始就使用 Java,在各个项目开发过程中先后使用过 Struts、Oracle ADF、AspectJ 等。最近正在使用 Spring 及 Ruby on Rails,对敏捷方法有比较大的兴趣并做过一些尝试。他的 blog 为 http://www.donews.net/victorsong 。为 InfoQ 中文站贡献内容,请邮件至 china-editorial@infoq.com

2007 年 4 月 27 日 22:01567
用户头像

发布了 150 篇内容, 共 39.5 次阅读, 收获喜欢 8 次。

关注

评论

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

最优组合问题-贪心算法

公众号:好奇心森林

列个清单-《清单革命》

Jack Hong

DDD 中的那些模式 — CQRS

Joshua

领域驱动设计 DDD 事件驱动 CQRS Event Driven

20200518-20200524朋友圈思考汇总

仙女的猪

日常思考

Java | @Override 不要再把它当成可有可无的了

YoungZY

Java 注解 Override annotation

Spring事务@Transactional底层原理

公众号:好奇心森林

spring 事务 hiber

坚持ARTS(week-1)

王钰淇

ARTS 打卡计划

企业微信机器人在大型财务共享中心的应用实践

DT极客

回“疫”录(24):开始了就不算晚

小天同学

疫情 个人成长 回忆录 个人感想 日常思考

人工智能学习心得--人工智能分类

岛乾坤

AI

在线文档的开发难度与突破

葡萄城技术团队

分布式协同 SpreadJS 在线文档

Jsp页面报错后如何找到提示信息中的_jsp.java文件

阡陌r

ARTS第一周

困到清醒

ARTS 打卡计划 起跑

别在发愁写页面了,强烈推荐几款傻瓜式扒网站神器!!

公众号:V5codings

ARTS 打卡 WEEK1

编程之心

ARTS 打卡计划

Implement Stack using Queues

Forelax

LeetCode

python实现·十大排序算法之归并排序(Merge Sort)

南风以南

Python 排序算法 归并排序

Cassandra集群架构及算法剖析

老任物联网杂谈

大数据 分布式 Cassandra 时序数据库

JUC整理笔记二之聊聊volatile

JFound

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(二)

图雀社区

node.js vue.js Vue

理解这八大优势,才算精通单元测试

禅道项目管理

测试 单元测试

爬虫框架Scrapy应用实践-淘宝保险频道数据抓取【1】-前期准备

hadesxiong

Python 爬虫 保险 Scrapy

产品周刊 | 第 16 期(20200524)

Herbert

产品 设计 产品经理 产品设计

足不出户“逛”银行,37家城商行、农商行手机银行App性能大比拼

博睿数据

APM App 评测 网银 银行

ziliqa生态打造区块链技术实体应用新标杆

极客编

绿宝这条宝藏街,夜宵也太太太太太好吃了吧!

极客编

ARTS打卡第一周

落曦

我是程序员,我为自己代言,我相信程序改变世界,虽然少不了质疑和嘲笑

陆陆通通

编程 程序员 高薪 代码

思考:如何打造一个优秀的研发体系?

菜根老谭

研发管理 研发效能 研发体系

重学 Java 设计模式:实战抽象工厂模式

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

微信gif图片大小的规则

石云升

微信 GIF

Google SoC系列:基于Web的Rails调试器_Ruby_Werner Schuster_InfoQ精选文章