Depurando em Ruby 1.9


90

O que vocês usam para depuração no ruby ​​1.9? rdebug não parece ser compatível .. há algo lá fora?


10
Ignore a primeira resposta; ruby-debug19está desatualizado agora.
Rob Howard,

Respostas:


50

Nota: esta resposta estava correta, mas agora está desatualizada. Veja a resposta correta abaixo. TL; DR: use 'depurador' agora.

ruby-debug agora está disponível com Ruby 1.9.x. Veja http://www.github.com/mark-moseley

Para instalar (usando gem na instalação do Ruby 1.9):

gem install ruby-debug19

(com talvez o 'sudo' necessário na frente dele).


Fiz uma tentativa superficial e não funcionou. Preciso de mais tempo para examinar isso.
Mark Moseley

ruby-debug-ide está funcionando agora - você pode obter o novo gem em cloud.github.com/downloads/mark-moseley/ruby-debug/…
Mark Moseley

Esta é uma grande notícia! Obrigado!
andi

bom trabalho :) mas você poderia fazer um fatgem (contendo as versões 1.8 e 1.9 do ruby-debug) para que não tenhamos que nos lembrar de fazer o rubydebbug19? :)
horseyguy

4
Não parece justo negar isso apenas porque o passar do tempo tornou a resposta errada. O SO precisa de alguma forma de lidar com esses casos de uso, para permitir que a nova resposta certa se torne a primeira listada, sem penalizar os autores de respostas mais antigas que não são mais úteis para ninguém.
iconoclasta

167

ruby-debug19não é mais mantido. Todas as outras respostas estão desatualizadas.

Mas há uma alternativa:

debugger para o resgate!

Coloque isso em seu Gemfile:

gem 'debugger', group: [:development, :test]

Simplesmente funciona. - E está incluso no Gemfile dos trilhos desde 3.2.algo para substituir ruby-debug19. Ele tem exatamente a mesma funcionalidade e é mantido ativamente.


1
Funciona bem. Muito melhor do que instalar o ruby-debug manualmente. Obrigado.
manu_v 01 de

5
Isso realmente precisa ser colocado como a melhor resposta.
Matt Zukowski

2
Sim, realmente esta resposta deve ser a resposta principal.
Nazar Hussain

E onde isso realmente vai no Gemfile.
Rig

Não importa. Coloque-o onde quiser, apenas não dentro de um bloco de grupo (Não em group :development do ... endou semelhante), porque ele já contém um grupo.
iblue

70

ATUALIZAÇÃO PARA RUBY 2.0+ e SEGUINTE

byebug é o depurador atualmente recomendado para Ruby 2.0+

Este problema foi documentado aqui , e cldwalker, o autor do debugger, observa que o debugger terá como escopo Ruby 1.9.2 e 1.9.3.

ATUALIZAÇÃO 2

É verdade que ruby-debug não é mantido ativamente, mesmo que eu não consiga encontrar nenhum lugar que não seja mais mantido.

Você pode usar a nova gema do depurador se precisar de ajuda para começar com a nova gema, você pode ver Ryan Bates elenco dos rails .

Em seu Gemfile coloque:

gem 'debugger', group: [:development, :test]

Você pode então adicionar um ponto de interrupção em qualquer lugar em seu código usando a debuggerpalavra - chave.

VOCÊ AINDA PODE USAR

linecache19 e ruby-debug-base19 com:

bash <<(curl -L https://raw.github.com/gist/1333785 )

ANSWERS ANSWERS

Apenas um complemento sobre isso com rvm, ruby ​​1.9.1-p378. A verdadeira história é que mesmo se ruby-debug estiver pronto para 1.9.x, linecache-0.43 não está. A solução é instalar:

gem install ruby-debug19

Isso resolve o problema para mim.

ATUALIZAÇÃO ANTIGA

Se você está tendo problemas com Ruby 1.9.2 e Rails 3 debugging put:

gem 'ruby-debug-base19', "0.11.24"
gem 'ruby-debug19', "0.11.6"

Em seu Gemfile e fazendo um

bundle install

Fará de você um depurador feliz novamente.


1
Obrigado, para mim essa foi a resposta mais adequada. Mas talvez seja porque você respondeu quase um ano depois e as coisas mudaram para sempre a esse respeito.
marcar

3

Algumas coisas que você poderia tentar

1) execute-o com o depurador normal do Ruby -rdebug [1] meio lento

2) executá-lo com a gema desenroladora [meio que fede, muito lento]

3) usar um monte de declarações de impressão rápido, meio que menos introspecção possível

4) vá para um prompt do irb e execute algum código a partir daí.

você poderia listar o código criando seu próprio “prompt irb” que listasse o código em torno de si mesmo [use o caller para descobrir onde você está] e então cair em um prompt irb normal.

5) talvez o jruby no modo de compatibilidade 1.9 tenha um depurador?

[1] http://beaver.net/rdebug/index-0.html


3

Se você ainda tiver problemas após instalar o ruby-debug19, tente atualizar o ruby-debug-base19. Eu tinha erros e não conseguia executar o WEBrick no modo de depuração até fazer isso.

gem update ruby-debug-base19

Oh, e obrigado Sr. Moseley por todo o seu trabalho árduo!


2

Veja minha resposta aqui: Ruby-debug not working - Stack Overflow

Trata-se de fazer com que a depuração Ruby funcione com a seguinte configuração

  • Mac OS X Lion 10.7.2
  • Aptana Studio 3 (Build 3.0.8.201201201658)
  • Usando o rvm, no diretório de trabalho do meu projeto, tenho um .rvmrc declarando:

    rvm use ruby-1.9.3-p0@mygemset

Eu espero que isso ajude!

- Freddy


2

Eu costumava seguir e funciona muito bem para mim:

gem 'depurador', grupo: [: desenvolvimento,: teste]

ruby 1.9.3p194 (2012-04-20 revisão 35410) [x86_64-linux] rails 3.2.8


0

Netbeans é um bom IDE para RoR. Bom depurador também.


1
Corrija-me se estiver errado, mas não acredito que o depurador funcione para Ruby 1.9.1 (implementação C) ainda. Pelo menos, não tive sucesso em fazê-lo funcionar.
JP Richardson

0

A versão do ruby ​​1.9.1-p243 foi lançada e o ruby-debug-ide compatível também está funcionando corretamente. Instale ruby-debug-ide usando o seguinte comando:

gem install ruby-debug-ide

Isso irá instalar as gemas ruby-debug-base19 e ruby-debug-ide. Mas antes disso, certifique-se de instalar o mingw com sucesso, seguindo a documentação do kit de desenvolvimento disponível em RubyForge .


0

Os recursos mais recentes estão disponíveis em ruby-debug-ide19 gem.


0

Existem muitas opções, dependendo das suas necessidades.

Eu uso pry-moves porque posso "olhar para trás" no que aconteceu dentro do comando anterior, reexecutando-os no modo de depuração direto do local.


-1

ninguém usa: ruby ​​-rdebug script.rb

então você pode usar: b script.rb: ## (onde ## é o número da linha de um comando ruby ​​válido), caso contrário, você estará talvez no meio de rubygems ou um de seus pedaços de código necessários.

Então você pode simplesmente definir o próximo ponto de interrupção como b: ##

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.