【问题标题】:ruby-debug19 on ruby-1.9.3-preview1 [duplicate]ruby-1.9.3-preview1 上的 ruby​​-debug19 [重复]
【发布时间】:2011-08-14 04:07:57
【问题描述】:

可能重复:
Rails 3.1 and Ruby 1.9.3p125: ruby-debug19 still crashes with “Symbol not found: _ruby_threadptr_data_type”

我在调试 ruby​​ 1.9.3 preview1 版本时遇到了一些问题。

我已经使用 rvm 安装了 1.9.3 和以下命令:

rvm install 1.9.3 --reconfigure --debug -C --enable-pthread

并用这个安装了 ruby​​-debug19:

gem install ruby-debug19 -- --with-ruby-include=$rvm_path/src/ruby-1.9.3-preview1

调试 gem 安装良好,但是当我打开带有调试功能的控制台或尝试任何带有调试标志 rails c --debugrspec spec --debug 的东西时。我收到以下错误:

/Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `require': dlopen(/Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/ruby-debug-base19-0.11.25/lib/ruby_debug.bundle, 9): Symbol not found: _ruby_current_thread (LoadError)
  Referenced from: /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/ruby-debug-base19-0.11.25/lib/ruby_debug.bundle
  Expected in: flat namespace
 in /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/ruby-debug-base19-0.11.25/lib/ruby_debug.bundle - /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/ruby-debug-base19-0.11.25/lib/ruby_debug.bundle
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `block in require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in `block in load_dependency'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:596:in `new_constants_in'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in `load_dependency'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/ruby-debug-base19-0.11.25/lib/ruby-debug-base.rb:1:in `<top (required)>'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `block in require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in `block in load_dependency'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:596:in `new_constants_in'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in `load_dependency'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/ruby-debug19-0.11.6/cli/ruby-debug.rb:5:in `<top (required)>'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@global/gems/bundler-1.0.17/lib/bundler/runtime.rb:68:in `require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@global/gems/bundler-1.0.17/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@global/gems/bundler-1.0.17/lib/bundler/runtime.rb:66:in `each'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@global/gems/bundler-1.0.17/lib/bundler/runtime.rb:66:in `block in require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@global/gems/bundler-1.0.17/lib/bundler/runtime.rb:55:in `each'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@global/gems/bundler-1.0.17/lib/bundler/runtime.rb:55:in `require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@global/gems/bundler-1.0.17/lib/bundler.rb:120:in `require'
    from /Users/mario/Work/project/config/application.rb:7:in `<top (required)>'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/railties-3.0.9/lib/rails/commands.rb:21:in `require'
    from /Users/mario/.rvm/gems/ruby-1.9.3-preview1@project/gems/railties-3.0.9/lib/rails/commands.rb:21:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

【问题讨论】:

  • 您正走在最前沿,介于 Lion 和 1.9.3-preview 之间。您可能想直接联系作者/支持者进行 ruby​​-debug。
  • 是的,我意识到,我想我会问这个问题,看看是否有人已经有了解决方案,或者我是否错过了一些东西。如果没有人提出任何建议,我会记录一张票。

标签: ruby debugging rubygems


【解决方案1】:

这是rafaeldx7alternate solution I found in a Gist

基本上,解决方案是使用几个库的较新版本,linecache19 v0.5.13 和 ruby-debug-base19 v0.11.26,这两个库都没有包含在 RubyGem 存储库中。

# Install with:
# bash < <(curl -L https://raw.github.com/gist/1333785)
#
# Reference: http://blog.wyeworks.com/2011/11/1/ruby-1-9-3-and-ruby-debug

echo "Installing ruby-debug with ruby-1.9.3-p0 ..."

curl -OL http://rubyforge.org/frs/download.php/75414/linecache19-0.5.13.gem
curl -OL http://rubyforge.org/frs/download.php/75415/ruby-debug-base19-0.11.26.gem

gem install linecache19-0.5.13.gem ruby-debug-base19-0.11.26.gem -- --with-ruby-include=$rvm_path/src/ruby-1.9.3-p0/

rm linecache19-0.5.13.gem ruby-debug-base19-0.11.26.gem

echo "Done."

【讨论】:

  • 不要错过隐藏在评论中的简单安装:bash &lt; &lt;(curl -L https://raw.github.com/gist/1333785)
  • 或者,对于没有 ruby​​ 源的 rbenv 用户(替换您的 ruby​​ 版本号):gem install linecache19-0.5.13.gem ruby-debug-base19-0.11.26.gem -- --with-ruby-include=~/.rbenv/versions/1.9.3-p125/include/ruby-1.9.1/ruby-1.9.3-p125
【解决方案2】:

编辑: git-pinning 解决方案起初有效,但我无法始终如一地使用它。我将把它留在这里,因为人们对它投了赞成票,但我认为我的 ruby​​-debug CLI 是偶然的,因为它是以非常规的方式打包的。

我建议改用pry;它似乎是 ruby​​-debug 等等。另外,我也使用require 'debug' 有一段时间了,在答案的顶部提到(可能还有人们赞成的内容),它让你进入的范围通常不是你所期望的。再次使用 pry(请注意,如果您想要类似调试器的步进,您还需要 this pry plugin,我还没有需要/测试过)。


看到Rails with ruby-debugger throw 'Symbol not found: _ruby_current_thread (LoadError)'(总结:你现在可以使用1.9s内置的调试器)就在我想通了以下之后:

由于我注意到您正在尝试让它与 Rails 一起使用,如果您使用的是 bundler,您可以将其添加到您的 gemfile:

gem 'linecache19', :git => 'https://github.com/mark-moseley/linecache.git' 
gem 'ruby-debug-base19', :git => 'https://github.com/mark-moseley/ruby-debug.git'

然后执行:

bundle config build.ruby-debug-base19 --with-ruby-include="$rvm_path/src/$(rvm tools strings)/"
bundle install

【讨论】:

  • 即使这样,我仍然无法加载这样的文件 -- ruby​​-debug,即使我说 :require => 'ruby-debug'
  • 是的,我一定是把某些东西设置得恰到好处。我不能在另一个项目上复制它。问题是 ruby​​-debug-base19 的“包”任务生成了两个 gem,一个用于 base,一个用于 CLI 解释器。看起来这些曾经是两个项目,但被合并了?不知道为什么,但它很难像这样使用。无论如何,更新我的解决方案以建议“撬”
【解决方案3】:

我创建了一个 Rubygems 存储库,其中包含 1.9.3 的最新版本。

只需在您的 Gemfile 中添加此源代码行,一切就绪:

source 'http://rubydebug19.s3.amazonaws.com'

gem 'ruby-debug19', :group => :development

【讨论】:

  • 干得好!我已经厌倦了重新学习如何在每个项目中处理这个问题!
【解决方案4】:

这是一个临时解决方案:http://blog.wyeworks.com/2011/11/1/ruby-1-9-3-and-ruby-debug

网站摘录:

首先下载linecache19-0.5.13.gem和 ruby-debug-base19-0.11.26.gem 来自 http://rubyforge.org/frs/?group_id=8883,然后……

$ gem install linecache19-0.5.13.gem 
Building native extensions.  This could take a while...
Successfully installed linecache19-0.5.13
1 gem installed
$ gem install ruby-debug-base19-0.11.26.gem -- --with-ruby-include=/Users/santiago/.rbenv/source/ruby-1.9.3-p0  
Building native extensions.  This could take a while...
Successfully installed ruby-debug-base19-0.11.26
1 gem installed
$ irb
irb(main):001:0> require 'ruby-debug'
=> true

【讨论】:

  • 如果链接在未来消失,只有链接的答案就没有用了。你能总结或解释那里所说的吗?
【解决方案5】:

这是我为使用 Bundler 1.x 和 Ruby 1.9.3-p0(已发布的稳定版本)所做的工作。希望这很快就会过时,但与此同时,如果您需要,这是一个可行的解决方法。

首先,将 linecache 和 ruby​​-debug-base gem 安装为系统 gem。请注意,这些是我从不同的地方获得的。

$ curl -OL http://rubyforge.org/frs/download.php/75415/ruby-debug-base19-0.11.26.gem
$ gem install linecache19-0.5.13.gem
$ gem install --pre ruby-debug-base19x # installs ruby-debug-base19x-0.11.30.pre4

接下来,为每个已安装的 gem 重新创建 gem 源代码:

$ mkdir ~/src/linecache19
$ cd /r193 # where your 1.9.3 is installed; system dependent
$ cd lib/ruby/gems/1.9.1 # where your gems are, should be the same
$ cp specifications/linecache19.gemspec ~src/linecache19
$ cp -r gems/linecache19-0.5.13/* ~/src/linecache19

$ mkdir ~/src/ruby-debug-base19x
$ cp specifications/ruby-debug-base19x-0.11.30.pre4.gemspec ~/src/ruby-debug-base19x
$ cp -r ruby-debug-base19x-0.11.30.pre4/* ~/src/ruby-debug-base19x

现在您可以使用 :path 指令在您的 Gemfile 中引用这些目录。如果你有一个本地 git 存储库,你可以在那里添加提交这些目录并从你的 Gemfile 中引用它们,如下所示:

group :development do
  gem 'linecache19', '~>0.5.12', :git => 'git://git-repo/ruby/linecache19.git'
  gem 'ruby-debug-base19x', :git => 'git://git-repo/ruby/ruby-debug-base19x.git'
  gem 'ruby-debug19', :require => 'ruby-debug'
  gem 'ruby-prof'
end

【讨论】:

    【解决方案6】:

    自 1.9.3-p125 以来,这些答案中的大多数已经过时了。

    我在此处为 ubuntu 11.10 编写了新说明:https://gist.github.com/2218661

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多