Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby 1.9中调试所需的代码_Ruby_Rubygems - Fatal编程技术网

如何在Ruby 1.9中调试所需的代码

如何在Ruby 1.9中调试所需的代码,ruby,rubygems,Ruby,Rubygems,根据锡人的意见,我提出了一个新问题 原始问题如下: 我用来调试的原始代码: require 'debugger' debugger require 'thor' 这是一个两难的问题: 使用默认的-rdebug进行调试,我无法访问Rubygem的源代码 使用debuggergem进行调试,在调试之前,我必须require(我在上一个问题中尝试的方式,这是不可接受的,因为在我到达之前发生了一些重要的事情) 希望能找到一种调试方法。当需要rubygems时。与Ruby 1.9及更高版本的集成基本上是

根据锡人的意见,我提出了一个新问题

原始问题如下:

我用来调试的原始代码:

require 'debugger'
debugger
require 'thor'
这是一个两难的问题:

  • 使用默认的
    -rdebug
    进行调试,我无法访问Rubygem的源代码
  • 使用
    debugger
    gem进行调试,在调试之前,我必须
    require
    (我在上一个问题中尝试的方式,这是不可接受的,因为在我到达之前发生了一些重要的事情)

  • 希望能找到一种调试方法。

    当需要rubygems时。与Ruby 1.9及更高版本的集成基本上是一个简单的过程。这可以通过
    ruby
    可执行文件的(文档不完整的)
    --disable gems
    选项禁用。在显式调用
    require'rubygems'
    之前,您可以利用此设置调试

    #从ruby开始--禁用gems
    需要“调试”#标准库调试-不加载rubygems
    需要“rubygems”#现在您可以调试它了
    
    如果您想使用进行调试,这仍然是可能的,但有点棘手,因为您必须在不加载Rubygems的情况下加载
    调试器
    。为此,您需要手动设置加载路径,以包括调试器的lib dir,以及任何gems调试器依赖的lib dir。这基本上就是Rubygems在加载Rubygems的情况下调用
    require'debugger'
    时为您所做的

    要确定libs调试器需要什么,可以使用以下命令:

    ruby-e“lp=$:.dup;gem'debugger';put$:-lp”
    
    这是一个小Ruby脚本,它首先获取加载路径的副本(
    $:
    是加载路径,您也可以使用
    $load\u path
    ),然后激活调试器gem,然后打印出新加载路径和原始加载路径之间的差异。这将为您提供激活
    调试器添加到加载路径的目录

    在我的机器上,这看起来像这样:

    $ruby-e“lp=$:.dup;gem'debugger';put$:-lp”
    /Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/columnize-0.3.6/lib
    /Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-ruby\u core\u source-1.2.0/lib
    /Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-linecache-1.2.0/lib
    /Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-1.5.0/lib
    
    现在,您可以使用它创建一个脚本,使用调试器调试
    需要“rubygems”

    #从ruby开始--禁用gems
    #在不加载rubygems的情况下设置加载路径
    $:.unshift'/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/columnize-0.3.6/lib'
    $:.unshift'/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-ruby\u core\u source-1.2.0/lib'
    $:.unshift'/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-linecache-1.2.0/lib'
    $:.unshift'/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-1.5.0/lib'
    #需要调试器并启动它
    需要“调试器”
    调试器
    需要“rubygems”#现在您可以使用调试器对此进行调试
    
    当要求使用rubygems
    时。与Ruby 1.9及更高版本的集成基本上是一个简单的过程。这可以通过
    ruby
    可执行文件的(文档不完整的)
    --disable gems
    选项禁用。在显式调用
    require'rubygems'
    之前,您可以利用此设置调试

    #从ruby开始--禁用gems
    需要“调试”#标准库调试-不加载rubygems
    需要“rubygems”#现在您可以调试它了
    
    如果您想使用进行调试,这仍然是可能的,但有点棘手,因为您必须在不加载Rubygems的情况下加载
    调试器
    。为此,您需要手动设置加载路径,以包括调试器的lib dir,以及任何gems调试器依赖的lib dir。这基本上就是Rubygems在加载Rubygems的情况下调用
    require'debugger'
    时为您所做的

    要确定libs调试器需要什么,可以使用以下命令:

    ruby-e“lp=$:.dup;gem'debugger';put$:-lp”
    
    这是一个小Ruby脚本,它首先获取加载路径的副本(
    $:
    是加载路径,您也可以使用
    $load\u path
    ),然后激活调试器gem,然后打印出新加载路径和原始加载路径之间的差异。这将为您提供激活
    调试器添加到加载路径的目录

    在我的机器上,这看起来像这样:

    $ruby-e“lp=$:.dup;gem'debugger';put$:-lp”
    /Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/columnize-0.3.6/lib
    /Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-ruby\u core\u source-1.2.0/lib
    /Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-linecache-1.2.0/lib
    /Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-1.5.0/lib
    
    现在,您可以使用它创建一个脚本,使用调试器调试
    需要“rubygems”

    #从ruby开始--禁用gems
    #在不加载rubygems的情况下设置加载路径
    $:.unshift'/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/columnize-0.3.6/lib'
    $:.unshift'/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-ruby\u core\u source-1.2.0/lib'
    $:.unshift'/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-linecache-1.2.0/lib'
    $:.unshift'/Users/matt/.rvm/gems/ruby-1.9.3-p385/gems/debugger-1.5.0/lib'
    #需要调试器并启动它
    需要“调试器”
    调试器
    需要“rubygems”#现在您可以使用调试器对此进行调试
    
    你能举一个你想调试的代码的小例子吗@ProGNOMmerssince此答案与另一个答案不同,您可以在此处复制与此答案相关的代码,因此对此答案的理解不依赖于另一个答案:-)您能举一个您要调试的代码的示例吗@ProGNOMmerssince此答案与其他答案不同,您可以在此处复制与此答案相关的代码,因此对此答案的理解不依赖于其他答案:-)