调试时在Ruby中获取未定义的局部变量错误

时间:2016-03-21 14:36:45

标签: ruby debugging

我在名为foo.rb

的文件中有以下脚本
def foo(msg)
  msg
end

def bar
  thing = 123
  thing
end

debugger
p foo(:hai)

我在调试模式下运行程序,如下所示:

ruby --debug -r debug foo.rb

注意我确保通过debug加载了stdlib -r,并且还使用--debug

将ruby环境置于调试模式

所以我得到的第一个输出是意料之外的:

Debug.rb                                                                                                                          
Emacs support available.                                                                                                          

/Users/M/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:57:        RUBYGEMS_ACTIVATION_MONITOR.enter

之后,如果我按c进行'继续',程序将以以下错误结束:

Exception `NameError' at foo.rb:10 - undefined local variable or method `debugger' for main:Object foo.rb:10:in `<main>': undefined local variable or method `debugger' for main:Object (NameError)

任何人都可以告诉我我做错了什么,以及如何实际获得调试模式以识别相关的debugger命令(如果这甚至是正确使用的命令;文档根本不清楚在此)

注意:我对此实例中的第三方gems不感兴趣(例如pry或ruby-debug)。我只对了解如何使用Ruby

附带的stdlib调试器感兴趣

更新

由于这个问题得到了回答,我已经开始为未来的参考创造了一个要点。对于任何绊倒此线程的人,您可能会发现它很有用:https://gist.github.com/Integralist/5658cb218bb50494a1fa

1 个答案:

答案 0 :(得分:0)

不要使用-r。加载交互式调试会话的整个机制是文字代码行require 'debug'

您的代码应如下所示:

def foo(msg)
  msg
end

def bar
  thing = 123
  thing
end

require 'debug'
p foo(:hai)

您只需输入ruby <program_name>.rb即可运行该程序。