ruby-debug19 на ruby-1.9.3-preview1

Возможный дубликат:
Rails 3.1 и Ruby 1.9.3p125: ruby-debug19 по-прежнему аварийно завершает работу с "Символ не найден: _ruby_threadptr_data_type"

У меня возникли проблемы с отладкой при работе над выпуском ruby ​​1.9.3 preview1.

Я установил 1.9.3 с помощью rvm с помощью следующей команды:

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 --debug или же rspec 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>'

6 ответов

Вот альтернативное решение, которое я нашел в Gist от rafaeldx7.

По сути, решение состоит в том, чтобы использовать более новые версии пары библиотек, 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."

РЕДАКТИРОВАТЬ: Сначала решение git-pinning сработало, но я не смог его последовательно использовать. Я оставлю это здесь, потому что люди проголосовали за него, но я думаю, что мой ruby-debug CLI работал случайно, так как он упакован нетрадиционным способом.

Я бы рекомендовал вместо этого использовать pry; похоже на ruby-debug и многое другое. Кроме того, я использовал require 'debug' какое-то время тоже упоминается в верхней части ответа (и, возможно, за то, что люди голосовали), и сфера, в которой он вас бросает, обычно не соответствует вашим ожиданиям. Опять же, используйте pry (и обратите внимание, что если вы хотите пошаговый отладчик, вам также понадобится этот плагин pry, который я еще не нуждался / не тестировал).


Увидел Rails с помощью 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

Я создал репозиторий Rubygems с новейшей версией для 1.9.3.

Просто добавьте эту исходную строку в ваш Gemfile, и все готово:

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

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

Большинство из этих ответов устарели с 1.9.3-p125.

Я написал новые инструкции для Ubuntu 11.10: https://gist.github.com/2218661

Вот временное решение: 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

Вот что я сделал, чтобы заставить работать с Bundler 1.x и Ruby 1.9.3-p0 (выпущенная стабильная версия). Надеюсь, это скоро устареет, но в то же время это жизнеспособный обходной путь, если это то, что вам нужно.

Сначала установите гемы linecache и ruby-debug-base как системные гемы. Обратите внимание, что я получил их из разных мест.

$ 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

Затем, заново создайте источник драгоценного камня для каждого установленного драгоценного камня:

$ 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

Теперь вы можете ссылаться на эти каталоги в своем Gemfile, используя :path директивы. Если у вас есть локальный репозиторий 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
Другие вопросы по тегам