Loading `debug` gem breaks `blankslate` gem
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Reproduce the interaction using the Ruby 2.7.2 and debug 1.6.2 environment described, then inspect lib/debug/session.rb around lines 1686-1689. Compare behavior with and without requiring debug, and verify the BlankSlate example remains compatible while determining the purpose of the redefinition.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Your environment
ruby -v: ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]rdbg -v: rdbg 1.6.2
Describe the bug
The debug gem undefines and redefines singleton_method_added.
The blankslate gem provides a "abstract base class with no predefined methods" except for some core Ruby builtins. "BlankSlate is useful as a base class when writing classes that depend upon method_missing (e.g. dynamic proxies)", so it only works if singleton_method_added is available. However, it hides singleton_method_added because it's redefined by the debug gem.
This problem does not occur when the debug gem is not required.
To Reproduce
require 'debug'
require 'blankslate'
BlankSlate.new.singleton_method_added
Buggy output -- the method isn't defined:
Traceback (most recent call last):
repro.rb:4:in `<main>': undefined method `singleton_method_added' for #<BlankSlate:0x000055a654b12fb0> (NoMethodError)
Expected behavior
The method is defined, but private:
Traceback (most recent call last):
repro.rb:3:in `<main>': private method `singleton_method_added' called for #<BlankSlate:0x000055d758dcd540> (NoMethodError)
Workaround
We can work around the bug by explicilty unhiding this method, or by requiring blankslate before debug:
BlankSlate.reveal(:singleton_method_added)
Additional context
The problem is caused by this code in the debug gem:
Why does the debug gem redefine this method?
- Lenguaje dominante
- Ruby
- Estrellas
- 1.3k
- Forks
- 146
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ruby/debug
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
-
Support exceptionOptions in setExceptionBreakpoints to catch arbitrary exception classes via DAP Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Todos los issues de ruby/debug
Issues similares
-
SyncEm always forwards a dummy block, so wrapped methods lose their no-block/Enumerator behavior Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
endoflife-date/endoflife.date#11086 ·
-
internal
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Kong/developer.konghq.com#7322 ·
-
bug P2
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100