[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Q: How to initialize debugger's state when starting

Dumaiu

2/23/2006 5:34:00 PM

Quick question:

When starting a Ruby script in debug ('-rdebug') mode, what's the
simplest way to source an *rc-type file for, say, setting breakpoints?
Is it possible to do such during the invocation of `ruby` at the
command-line?

Thanks,
--J J-S

6 Answers

Dumaiu

2/23/2006 7:47:00 PM

0

PS:
(What I'm looking for is something with the effect of gdb's '-x'
option.)

Logan Capaldo

2/23/2006 10:51:00 PM

0


On Feb 23, 2006, at 2:48 PM, Dumaiu wrote:

> PS:
> (What I'm looking for is something with the effect of gdb's '-x'
> option.)
>
>

Well after looking at debug.rb and trying to hack this in, I think
your best bet is to look at one of the GUI debuggers (like Mr. Guid
or Emacs) that talk to rdb and write a little frontend to it that
would have this capability. Unfortunately, its setup like

def do_command
input = readline
...
end

instead of

def do_command(input)
...
end

do_command(readline)

so I gave up trying to hack in this functionality directly. Good
luck, though



Dumaiu

2/23/2006 11:50:00 PM

0

Thanks. I _thought_ it would be a quick question... one of those
It's-so-obvious-I-can't-see-it moments. Because I'm not much for
IDE's, I think I'll wait to see if anyone else phones in and then maybe
take a bite out of debug.rb myself.

-J

Matthias Georgi

2/24/2006 12:51:00 AM

0

A short hack.
Make a copy of debug.rb and put these lines right after the Context
class.

class Context
alias original_readline readline
def readline(prompt, hist)
@rc_file ||= File.readlines("debug.rc")
if @rc_file.empty?
original_readline(prompt, hist)
else
@rc_file.shift
end
end
end

Now create a file debug.rc with your desired breakpoint:
b 100
b 200

Start the debugger:
ruby -r./debug myscript.rb

Logan Capaldo

2/24/2006 1:42:00 AM

0


On Feb 23, 2006, at 7:53 PM, Matthias Georgi wrote:

> A short hack.
> Make a copy of debug.rb and put these lines right after the Context
> class.
>
> class Context
> alias original_readline readline
> def readline(prompt, hist)
> @rc_file ||= File.readlines("debug.rc")
> if @rc_file.empty?
> original_readline(prompt, hist)
> else
> @rc_file.shift
> end
> end
> end
>
> Now create a file debug.rc with your desired breakpoint:
> b 100
> b 200
>
> Start the debugger:
> ruby -r./debug myscript.rb
>
>

Clever. I hope if someone comes up with a clean way to do this it
gets merged in. It seems like a good idea.



Mark Volkmann

2/28/2006 2:24:00 PM

0

On 2/23/06, Matthias Georgi <matti.georgi@gmail.com> wrote:
> A short hack.
> Make a copy of debug.rb and put these lines right after the Context
> class.
>
> class Context
> alias original_readline readline
> def readline(prompt, hist)
> @rc_file ||= File.readlines("debug.rc")
> if @rc_file.empty?
> original_readline(prompt, hist)
> else
> @rc_file.shift
> end
> end
> end
>
> Now create a file debug.rc with your desired breakpoint:
> b 100
> b 200
>
> Start the debugger:
> ruby -r./debug myscript.rb

Cool idea! However, if you don't have a debug.rc file, this doesn't
work. I tried to change it to handle that case as follows, but it's
still not quite right. Breakpoints I set in debug.rc are listed when I
run "b", but when I run "c" to continue execution, it doesn't stop at
them. However, if I issue the same break commands in the debugger,
they work. Can you see what I'm doing wrong?

class Context
alias original_readline readline
def readline(prompt, history)
# If config file exists and hasn't been read yet, read it.
if not @rc_file and File.exists?('debug.rc')
@rc_file = File.readlines('debug.rc')
end

if @rc_file and not @rc_file.empty?
@rc_file.shift
else
original_readline(prompt, history)
end
end
end

--
R. Mark Volkmann
Partner, Object Computing, Inc.