I’m trying to debug an external dsl and i have found some problems to
step in the code (at least under windows)
I have a main.rb file (file are attached in test_debug.7z) :
puts “In Main before eval”
instance_eval(File.read(“dyn.dsl”),“dyn.dsl”)
puts “In Main after eval”
and a dyn.dsl file :
puts “In dyn line 1”
x = 1 + 1
puts “x = #{x}”
Using Rubymine2.0 with ruby-debug-ide 0.4.9 correctly compiled (it was
quite hard to get there by the way…), the debugger is able to set a
breakpoint correctly on file “dyn.dsl”. I’m able to step in this file.
Everything is ok.
Now, if i try to debug it from the comman line : [ruby -r debug
main.rb], i’m not able to see the source file of dyn.dsl code :
E:\Code\RubyTest>ruby -r debug main.rb
Debug.rb
Emacs support available.
main.rb:1:puts “In Main before eval”
(rdb:1) break dyn.dsl:1
Set breakpoint 1 at dyn.dsl:1
(rdb:1) cont
In Main before eval
Breakpoint 1, toplevel at dyn.dsl:1
dyn.dsl:1:
(rdb:1) list
[-4, 5] in dyn.dsl
No sourcefile available for dyn.dsl
Ruby version is : ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
Worst is that with ruby 1.9.1, I’m no longer able to debug through
instance_eval on an IDE, at least tested Rubymine2.0 or Netbeans.
Do you have any explanations?
instance_eval(File.read(“dyn.dsl”),“dyn.dsl”)
Could you not just do this instead?
load “dyn.dsl”
The ‘self’ object context would be lost. But at worst you could pass
that through a constant or a global or thread-local variable, e.g.
dyn.dsl contains
$SELF.instance_eval { … original content …
}
Do you have any explanations?
A debugger is probably not going to be able to find the source file if
the source is not in a file but is in a String.
Brian C. wrote:
instance_eval(File.read(“dyn.dsl”),“dyn.dsl”)
Could you not just do this instead?
load “dyn.dsl”
The ‘self’ object context would be lost. But at worst you could pass
that through a constant or a global or thread-local variable, e.g.
dyn.dsl contains
$SELF.instance_eval { … original content …
}
I would prefer another option… I would like to keep the dsl code
clean, and yes, I need the self…
A debugger is probably not going to be able to find the source file if
the source is not in a file but is in a String.
Well, with the 2nd argument of the instance_eval, even if it’s more used
to report a correct error, could be used for that (and I believe that
this is used probably by some of those debuggers). Seems that there is
an inconsistency between the different debuggers : JRuby 1.4.0 seems to
be able to step in the code without no problem. The ruby-debug-ide 0.4.9
is working well. The ruby-debug-ide19 is not working on this, the -r
debug command line is not working… weird…
Anyway, i can still live with that. It’s working at least from an ide on
1.8.6 and in jruby 1.4.0. I’m also curious if it’s a bug (not being able
to step in the code) or a feature that is undocumented…