Puis-je passer à une invite IRB à partir d'un script Ruby en cours d'exécution? Je veux lancer un script, mais il faut qu'il me donne une invite IRB à un point du programme avec l'état actuel du programme, mais pas seulement en exécutant rdebug et en ayant un point d'arrêt.Comment passer à l'invite IRB à partir d'un script en cours d'exécution?
Répondre
vous pouvez utiliser-debug Ruby pour obtenir l'accès à iRB
require 'rubygems'
require 'ruby-debug'
x = 23
puts "welcome"
debugger
puts "end"
lorsque le programme atteint débogueur vous aurez accès à RIR.
apparemment il faut un morceau de code pour tomber dans irb.
Voici le lien (semble bien fonctionner).
http://jameskilton.com/2009/04/02/embedding-irb-into-your-ruby-application
require 'irb'
module IRB
def self.start_session(binding) # call this method to drop into irb
unless @__initialized
args = ARGV
ARGV.replace(ARGV.dup)
IRB.setup(nil)
ARGV.replace(args)
@__initialized = true
end
workspace = WorkSpace.new(binding)
irb = Irb.new(workspace)
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
@CONF[:MAIN_CONTEXT] = irb.context
catch(:IRB_EXIT) do
irb.eval_input
end
end
end
Excellente trouvaille, merci! C'est exactement ce dont j'avais besoin pour accéder aux variables de classe et d'instance dans le contexte de l'invocation de IRB.start_session (binding). – csmosx
Pry (un IRB alternatif) permet également de faire cela, en fait, il a été conçu à partir du sol pour exactement ce cas d'utilisation :)
Il est aussi facile que de mettre binding.pry
au point où vous voulez commencer la session:
require 'pry'
x = 10
binding.pry
Et à l'intérieur de la session:
pry(main)> puts x
=> 10
Consultez le site Web: http://pry.github.com
Pry vous permettent de:
- goutte dans une session à tout moment dans votre code
- Afficher le code source de la méthode
- vue de la documentation de la méthode (n'utilisant pas RI donc vous n'avez pas à le pré-générer)
- entrer et sortir du contexte différent s
- coloration syntaxique
- intégration essentiel
- vue et historique relecture
- éditeurs ouverts à modifier les méthodes utilisant
edit obj.my_method
syntaxe
Une tonne de plus grandes et des caractéristiques originales
Ajoutez simplement cette ligne à l'endroit où vous voulez le point d'arrêt:
require 'ruby-debug';debugger
mais je suggère au lieu de l'utilisation pry RIR, ce qui est super pratique, insérez la ligne suivante à la place:
require 'pry'; binding.pry
Cette fonction est disponible à partir de Ruby 2.4. Vous pouvez simplement utiliser binding.irb
E.g.
require 'irb'
a = 10
binding.irb
puts a
Si vous exécutez le code ci-dessus, vous obtiendrez console RIR, de sorte que vous pouvez vérifier les valeurs des variables locales et toute autre chose qui est portée.
Source: http://blog.redpanthers.co/new-binding-irb-introduced-ruby-2-4/
Ruby commit: https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a
Je suis assez tard pour le jeu, mais si vous chargez un script à partir de RIR/Pry déjà, un raise
simple fonctionne aussi vous pop revenir à l'invite irb/pry. Je l'utilise assez souvent lors de l'écriture d'un des scripts dans la console rails.
- 1. Interprétation \ n dans irb ou script/console
- 2. Comment passer une expression lambda à un constructeur C# à partir d'un script IronPython?
- 3. Comment passer tableau en php à ruby?
- 4. Copie de données à partir d'un script ruby en cours d'exécution
- 5. Appel d'une fonction à partir d'un processus en cours
- 6. Erreur tâche Rake en cours d'exécution à partir de l'IDE
- 7. NoClassDefFoundError en cours d'exécution à partir de jar
- 8. Exécution d'un script à partir de Groovy
- 9. Passer plusieurs Eval() à une fonction JavaScript à partir d'ASPX
- 10. Entrée à partir du script shell
- 11. Comment rediriger stdin à partir d'un script shell vers une commande dans le script shell?
- 12. Accordez SeServiceLogonRight à partir du script
- 13. MSTest échouer en 2008 à partir du script de construction
- 14. Comment éditer/etc/sudoers à partir d'un script?
- 15. Comment obtenir le nom d'un script Python en cours d'exécution?
- 16. Comment trouver le chemin du script en cours d'exécution?
- 17. Comment intercepter XMLHttpRequests à partir d'un script Greasemonkey?
- 18. Comment appeler un script Perl à partir d'Excel?
- 19. Macro Word 2008 à SVN ADD document en cours
- 20. obtenir la date à partir d'un flux RSS en Ruby
- 21. Comment exécuter un script PowerShell à partir de SSIS
- 22. Comment exécutez-vous SQL à partir d'un script bash?
- 23. Comment exécuter un script bash à partir du programme C++
- 24. Comment lancer HTMLDOC à partir d'un script CGI?
- 25. Récupération de Raw_Input à partir d'un script système exécuté
- 26. Démarrer l'application à partir de PowerShell s'exécutant dans un espace d'exécution personnalisé, garder l'application en cours d'exécution, terminer le script?
- 27. Exécution manuelle de la tâche, en cours d'exécution à partir de cron Je reçois un sigfault
- 28. bash: Exécuter un autre programme dans le répertoire courant en cours d'exécution à partir du chemin
- 29. Comment puis-je mettre à niveau un module dans une application NetBeans Platform en cours d'exécution à partir d'une ligne de commande ou d'un script?
- 30. ASP - Déterminer si le script en cours est en cours d'exécution comme un include
Cela tiendra-t-il compte du contexte contraignant? Puis-je définir la liaison à autre chose? –
Duh. Je suis un idiot. Merci! –
Cela nécessite le gem 'ruby-debug', qui ne fonctionne pas avec Ruby 1.9. – Zr40