Ruby Debug

  • 调试器

    语言的易用性无关紧要,如果语言多于几行,通常会包含一些错误。为了帮助处理错误,Ruby的标准发行版包括调试器。为了启动Ruby调试器,请使用命令行选项-r debug加载调试库。调试器在可执行代码的第一行之前停止,并要求输入用户命令。
    使用语法
    
    $ ruby -r debug filename[, ...]
    
  • Ruby调试器命令

    这是命令的完整列表,您可以在调试程序时使用这些命令。在这里,不必使用complete关键字来发出命令,[...]内部给出的部分是选项。
    command 说明
    b[reak] [< file| class>:]< line| method> 将断点设置到某个位置。断点是您出于调试目的而希望暂停程序执行的地方。
    wat[ch] expression 设置观察点。
    cat[ch] (exception|off) 将捕获点设置为异常。
    b[reak] 显示断点和观察点。
    del[ete] [n] 删除断点。
    disp[lay] expression 显示表达式的值。
    undisp[lay] [ n] 删除n的显示
    c[ont] 继续执行。
    s[tep] [ n] 执行下n行,进入方法。
    n[ext] [ n] 执行下n行单步执行方法。
    w[here] 显示堆叠框架
    f[rame] 在哪里的同义词。
    l[ist][<-| n- m>] 显示从n到m的源代码行。
    up [ n] 在堆栈帧中上移n个层。
    down [ n] 在堆栈帧中向下移动n个级别。
    fin[ish] 完成当前方法的执行。
    tr[ace] [on|off] 切换跟踪模式的开和关。
    q[uit] 退出调试器。
    v[ar] g[lobal] 显示全局变量。
    v[ar] l[ocal] 显示局部变量。
    v[ar] i[instance] object 显示对象的实例变量
    v[ar] c[onst] object 显示对象的常数。
    m[ethod] i[instance] object 显示对象的实例方法。
    m[ethod] class| module 显示类或模块的实例方法。
    th[read] l[ist] 显示线程。
    th[read] c[ur[rent]] 显示当前线程。
    th[read] n 停止指定的线程。
    th[read] stop > n [th]的同义词。
    th[read] c[ur[rent]] n> th [read] n的同义词
    th[read] resume > 恢复线程n
    p expression 计算表达式
    h[elp] 显示帮助信息
    everything else 评估。
  • 示例

    考虑以下文件hello.rb,需要对其进行调试-
    
    class Hello
       def initialize( hello )
          @hello = hello
       end
       def hello
          @hello
       end
    end
    
    salute = Hello.new( "Hello, Mac!" )
    puts salute.hello
    
    这是捕获的一个交互式会话。-
    
    $ ruby -r debug hello.rb
    Debug.rb
    Emacs support available.
    
    hello.rb:3:class Hello
    (rdb:1) v l
       salute => nil
    (rdb:1) b 10
    Set breakpoint 1 at hello.rb:10
    (rdb:1) c
    Hello, Mac!