如何在Emacs中使用Ruby调试器?

时间:2012-12-27 06:56:29

标签: ruby debugging

我在Emacs中编写Ruby,但我的Emacs技能实际上非常低。我可以做的是打开项目,TDD使用M-x rinari-test,或者在第二个窗口使用M-x run-ruby玩劣质Ruby。现在我想开始使用StdLib的调试器。我可以通过说:

从irb召唤它
require 'debug'

我进入提示

(rdb:1)

但我的能力结束了。我甚至不知道如何进入文件。打字'帮助'带来了一个屏幕,但它并没有帮助我最终开始调试我的bug宝石。在线,每个人写的东西,如“rdebug”或“ruby-debug”或我最初不想使用的东西,其次,作为麻瓜,我无法安装在我的Debian上。请帮忙!!!

1 个答案:

答案 0 :(得分:2)

您确实需要尝试在调试器中读取help的输出。它很好地解释了命令。

例如,对于练习,请在命令行中尝试此操作,而不是在编辑器/ IDE中:

ruby -rdebug -e 'p 1'
h

Ruby的调试器将输出帮助摘要:

Debugger help v.-0.002b
Commands
  b[reak] [file:|class:]<line|method>
  b[reak] [class.]<line|method>
                             set breakpoint to some position
  wat[ch] <expression>       set watchpoint to some expression
  cat[ch] (<exception>|off)  set catchpoint to an exception
  b[reak]                    list breakpoints
  cat[ch]                    show catchpoint
  del[ete][ nnn]             delete some or all breakpoints
  disp[lay] <expression>     add expression into display expression list
  undisp[lay][ nnn]          delete one particular or all display expressions
  c[ont]                     run until program ends or hit breakpoint
  s[tep][ nnn]               step (into methods) one line or till line nnn
  n[ext][ nnn]               go over one line or till line nnn
  w[here]                    display frames
  f[rame]                    alias for where
  l[ist][ (-|nn-mm)]         list program, - lists backwards
                             nn-mm lists given lines
  up[ nn]                    move to higher frame
  down[ nn]                  move to lower frame
  fin[ish]                   return to outer frame
  tr[ace] (on|off)           set trace mode of current thread
  tr[ace] (on|off) all       set trace mode of all threads
  q[uit]                     exit from debugger
  v[ar] g[lobal]             show global variables
  v[ar] l[ocal]              show local variables
  v[ar] i[nstance] <object>  show instance variables of object
  v[ar] c[onst] <object>     show constants of object
  m[ethod] i[nstance] <obj>  show methods of object
  m[ethod] <class|module>    show instance methods of class or module
  th[read] l[ist]            list all threads
  th[read] c[ur[rent]]       show current thread
  th[read] [sw[itch]] <nnn>  switch thread context to nnn
  th[read] stop <nnn>        stop thread nnn
  th[read] resume <nnn>      resume thread nnn
  p expression               evaluate expression and print its value
  h[elp]                     print this help
  <everything else>          evaluate

开始时的重要命令是sncb以及q

  • s进入方法。
  • n跨越方法。
  • c number运行(继续),直至到达number行。
  • b number在第number行设置断点。设置断点后,使用c继续运行,直到执行该行。
  • q退出调试器。

就个人而言,我使用debugger宝石。其他人使用PRY,它类似于IRB,但使用类似调试器的扩展。

知道如何使用调试器是一项很好的技能。您可以使用调试器快速跟踪问题,尝试使用puts语句需要更长时间,因为您可以交互地查看变量包含的内容,或者在变量包含特定值之前有条件地循环。