Forum: Ruby Q: How to initialize debugger's state when starting

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Dumaiu (Guest)
on 2006-02-23 19:40
(Received via mailing list)
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
Dumaiu (Guest)
on 2006-02-23 21:50
(Received via mailing list)
PS:
  (What I'm looking for is something with the effect of gdb's '-x'
option.)
Logan C. (Guest)
on 2006-02-24 00:53
(Received via mailing list)
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 (Guest)
on 2006-02-24 01:54
(Received via mailing list)
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 G. (Guest)
on 2006-02-24 02:54
(Received via mailing list)
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 C. (Guest)
on 2006-02-24 03:43
(Received via mailing list)
On Feb 23, 2006, at 7:53 PM, Matthias G. wrote:

>     else
> 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 V. (Guest)
on 2006-02-28 16:24
(Received via mailing list)
On 2/23/06, Matthias G. <removed_email_address@domain.invalid> wrote:
>     else
> 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
This topic is locked and can not be replied to.