使用这个最小的ruby代码:
require 'debug'
puts
在一个名为的文件中,例如script.rb
如果我这样启动它:ruby -rdebug script.rb
然后在调试提示符上按l
,我按预期获得列表
如果我改为正常运行ruby script.rb
按下l
时,我得到:
(rdb:1) l
[-3, 6] in script.rb
No sourcefile available for script.rb
错误消息充其量只是误导:工作目录没有改变,文件肯定还在那里!
我无法找到有关此行为的文档(我在jruby和mri上都尝试过,行为是一样的)
我知道'调试器'和'撬',但它们提供了不同的用例:
我已经习惯了其他带有内置调试模块的脚本语言,这可以让我在代码中的任何地方放置一个语句,让我进入调试shell,检查代码,变量等......优点建立它是因为它可以随处使用,而不必为它设置环境,或者甚至当我在一台不属于我自己的机器上时
我显然可以通过始终使用-rdebug
调用解释器并手动设置断点来解决此问题,但我发现这比替代更多
答案 0 :(得分:2)
在查看调试源代码后,我找到了一种解决方法和修复:
解决方法可以是:
trace on
next
trace off
list
这样您就可以在不使用-rdebug
重新启动解释器的情况下获取列表,但缺点是您将从跟踪中获得一些其他不需要的输出,并且只有在移动之后才能看到它一个陈述
修复问题:问题是SCRIPT_LINES__
Hash缺少当前文件的值...显然它只在tracer.rb
内设置
我已经更改了line 161,并使用跟踪调用[] =的子类的子类更改了Hash,并且我无法挖掘实际执行代码的代码来自不同文件的函数
另外:我还没有找到一个积极使用这个模块的人(我在freenode上的#ruby,#jruby和#pry都问过),以及它使用function that is now obsolete的事实这让我对这个模块的维护状态有点悲观
尽管如此,我提交了一个pull request for the fix(实际上它非常愚蠢和简单,但除此之外,我需要更深入地了解这个模块,并可能重构它的某些部分......但是如果这样的话模块没有得到积极的维护,我不确定这是不是一件好事。答案 1 :(得分:1)
我怀疑Ruby解释器没有能够在没有调试模块中的组件的情况下加载源文件。所以,没有-rdebug,无法访问源文件。我同意这是一个误导性的错误。 “未加载调试功能”可能会更好。