BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Werner Schuster 关注 7 他的粉丝 ,译者 宋玮 关注 0 他的粉丝 发布于 2007年4月29日. 估计阅读时间: 6 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT