Forum: Ruby REG: How can we debug a ruby script

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.
688cbfb30e1a2765586c0fd5d97dee95?d=identicon&s=25 unknown (Guest)
on 2009-03-30 17:52
(Received via mailing list)
Hi,
I want to debug a ruby script using -rdebug option.
The following is the source code: with file fact.rb.
Fact.rb
def fact(n)
  return 1 if n == 0
  f = 1
  n.downto(1) do |i|
    f *= i
  end
  return f
end
print fact(2), "\n"

Debugging
When I run the following command and type 'n' for debugin the next line,
it is going in to some other files.
As shown below.
C:\ruby\samples\RubySrc-1.8.6-p111\sample>ruby -rdebug fact.rb
Debug.rb
Emacs support available.

c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10:require 'rubygems'
(rdb:1) list
[5, 14] in c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb
   5  # All rights reserved.
   6  # See LICENSE.txt for permissions.
   7  #++
   8
   9
=> 10  require 'rubygems'
(rdb:1) n
c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:10:require 'rbconfig'
(rdb:1) n
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:5:module Config
(rdb:1) n
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:153:RbConfig = Config #
compatibility for ruby-1.9
(rdb:1) n
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:154:CROSS_COMPILING = nil
unless defined? CROSS_COMPILING
(rdb:1) n
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:154:CROSS_COMPILING = nil
unless defined? CROSS_COMPILING
(rdb:1) n
c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:12:module Gem
(rdb:1) n
c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:18:module Kernel
(rdb:1)'

What is the command that iam supposed to used to debug actual source
code, line by line( with out moving to other files)?

Thanks and Regards,
Anil  kumar
753dcb78b3a3651127665da4bed3c782?d=identicon&s=25 Brian Candler (candlerb)
on 2009-03-31 11:13
Something in your environment is making ruby do -rubygems (require
'rubygems')
Perhaps the RUBYOPT environment variable is set, because I can replicate
your problem like this:

$ export RUBYOPT=-rubygems
$ ruby -rdebug fact.rb
Debug.rb
Emacs support available.

/usr/local/lib/site_ruby/1.8/ubygems.rb:10:require 'rubygems'
(rdb:1)

So if this is the case, solution 1 is simply to unset the RUBYOPT
variable.

Solution 2 is to set a breakpoint at the start of your program.

$ ruby -rdebug fact.rb
Debug.rb
Emacs support available.

/usr/local/lib/site_ruby/1.8/ubygems.rb:10:require 'rubygems'
(rdb:1) b fact.rb:1
Set breakpoint 1 at fact.rb:1
(rdb:1) cont
Breakpoint 1, toplevel at fact.rb:1
fact.rb:1:def fact(n)
(rdb:1) n
fact.rb:9:print fact(2), "\n"
(rdb:1) n
2
$

Solution 3 is to require rubygems *before* requiring debug, because when
it has been required once, it won't be required again:

$ ruby -rubygems -rdebug fact.rb
Debug.rb
Emacs support available.

fact.rb:1:def fact(n)
(rdb:1)

This third one probably involves the least work.
688cbfb30e1a2765586c0fd5d97dee95?d=identicon&s=25 unknown (Guest)
on 2009-04-19 11:43
(Received via mailing list)
Hi,
Using the below method mention the below mail, I was successfully able
to run and debug the script.
But when I run unittest class, the flow goes into testcase case class as
below.

Testscript
require "test/unit"

class TestSimpleNumber < Test::Unit::TestCase

  def test_simple
    assert_equal("abc", "abc" )

  end

  def test_typecheck
    assert_equal("abc", "abc" )
  end

  def test_failure
    assert_equal("abc", "abc" )
  end

End



Execution:


C:\ruby>ruby  -rubygems -rdebug  unittest.rb
Debug.rb
Emacs support available.

unittest.rb:1:require "test/unit"
(rdb:1) b 6
Set breakpoint 1 at unittest.rb:6
(rdb:1) cont
Loaded suite unittest
Started
.Breakpoint 1, test_simple at unittest.rb:6
unittest.rb:6:    assert_equal("abc", "abc" )
(rdb:1) n
c:/ruby/lib/ruby/1.8/test/unit/testcase.rb:85:          begin
(rdb:1) n
c:/ruby/lib/ruby/1.8/test/unit/testcase.rb:86:            teardown
(rdb:1) n
c:/ruby/lib/ruby/1.8/test/unit/testcase.rb:94:        result.add_run
(rdb:1) n
c:/ruby/lib/ruby/1.8/test/unit/testcase.rb:95:        yield(FINISHED,
name)
(rdb:1) n
c:/ruby/lib/ruby/1.8/test/unit/ui/testrunnermediator.rb:47:
notify_listeners(channel, value)
(rdb:1)


Please help me in this regard.

Thanks,
Anil kumar.
Aafa8848c4b764f080b1b31a51eab73d?d=identicon&s=25 Phlip (Guest)
on 2009-04-19 17:06
(Received via mailing list)
Tips for posting:

Don't reply to someone else's thread and change the name. Start a new
thread
with your New button.

Now to your problem - is this a typo?

> End

The code should not compile with that error, but your stack trace
implies
you started executing. However...

> C:\ruby>ruby  -rubygems -rdebug  unittest.rb

You might need -rrubygems.

Next, report what happens without the -rdebug. I never debug unit tests
-
they tend to help you avoid excess debugging!
Aafa8848c4b764f080b1b31a51eab73d?d=identicon&s=25 Phlip (Guest)
on 2009-04-19 17:20
(Received via mailing list)
Phlip wrote:
> Tips for posting:
>
> Don't reply to someone else's thread and change the name. Start a new thread
> with your New button.

My bad! I didn't notice the thread was the same.

Carry on! (;
753dcb78b3a3651127665da4bed3c782?d=identicon&s=25 Brian Candler (candlerb)
on 2009-04-19 19:24
Phlip wrote:

>> C:\ruby>ruby  -rubygems -rdebug  unittest.rb
>
> You might need -rrubygems.

-rubygems is correct (the file "ubygems.rb" exists for this purpose)

> Next, report what happens without the -rdebug. I never debug unit tests

The problem may be that Test::Unit does strange stuff with atexit to
start the tests. I'm afraid I don't have a good solution for using
-rdebug with Test::Unit. Try writing a separate standalone program which
replicates the problem.

Regards,

Brian.
This topic is locked and can not be replied to.