【问题标题】:Can I debug dynamically added Ruby method?我可以调试动态添加的 Ruby 方法吗?
【发布时间】:2013-04-30 23:12:49
【问题描述】:

我想在数据库中存储简短的 sn-ps 代码(遵循标准签名)并在运行时“注入”它们。一种方法是使用eval(my_code)。有没有办法使用断点等调试注入的代码? (我正在使用 Rubymine)

我知道我可以只登录到控制台等,但如果可能的话,我更喜欢 IDE 样式的调试。

【问题讨论】:

  • 我认为这是不可能的。
  • 看来 Linuxios 是正确的 - 根据我对 IntelliJ 的有限测试,这似乎是不可能的。

标签: ruby debugging metaprogramming rubymine


【解决方案1】:

嗯。让我们分析一下你的问题。首先,它似乎与数据库没有任何关系:您只需将代码块存储在源表单中的某个地方。它可以是文件,也可以是数据库。其次,您不想要 IDE 风格的“调试”,而是 TDD-style。 (但现在不要专注于这个问题。)

您需要的是关于您的代码的断言。也就是说,您需要描述在给定一些输入示例的情况下您的代码应该产生什么输出。然后,您需要运行该代码并查看其功能是否符合预期。此外,如果您不确定您的 sn-ps 的来源,run them in a sandbox (with $SAFE = 4)。如果你的代码没有达到预期,提出很好的错误(TypeError,甚至更好,你的自定义异常),然后你可以例如。拯救那些例外,例如。使用一些默认代码 sn-ps...

...但也许我实际上并没有回答您提出的相同问题。如果是这种情况,那么让我分享一个指向此sourcify gem 的链接,让您知道来源,以便您可以通过说例如插入断点。在代码中间需要'rdebug',甚至可以将代码转换为sexp。这就是我所知道的。

【讨论】:

  • 我提到数据库作为代码存储只是为了提供上下文(我没有将此问题标记为数据库问题)。我也知道 TDD 等。您提供的 gem 链接看起来很有希望,所以我今天将对此进行调查。谢谢!
猜你喜欢
  • 2011-08-01
  • 2011-11-25
  • 2012-03-26
  • 1970-01-01
  • 2017-02-25
  • 2011-05-26
  • 1970-01-01
  • 2013-06-29
  • 2011-03-31
相关资源
最近更新 更多