# REG: How can we debug a ruby script

**URL:** <https://www.ruby-forum.com/t/reg-how-can-we-debug-a-ruby-script/164266>\
**Category:** Ruby\
**Created:** [March 30, 2009, 5:52pm UTC](https://www.ruby-forum.com/t/reg-how-can-we-debug-a-ruby-script/164266 "2009-03-30T17:52:58Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 30, 2009, 5:52pm UTC](https://www.ruby-forum.com/t/reg-how-can-we-debug-a-ruby-script/164266/1 "2009-03-30T17:52:58Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [March 31, 2009, 11:13am UTC](https://www.ruby-forum.com/t/reg-how-can-we-debug-a-ruby-script/164266/2 "2009-03-31T11:13:01Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 19, 2009, 11:43am UTC](https://www.ruby-forum.com/t/reg-how-can-we-debug-a-ruby-script/164266/3 "2009-04-19T11:43:53Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 19, 2009, 5:06pm UTC](https://www.ruby-forum.com/t/reg-how-can-we-debug-a-ruby-script/164266/4 "2009-04-19T17:06:01Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 19, 2009, 5:20pm UTC](https://www.ruby-forum.com/t/reg-how-can-we-debug-a-ruby-script/164266/5 "2009-04-19T17:20:42Z")

</div>

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! (;

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 19, 2009, 7:24pm UTC](https://www.ruby-forum.com/t/reg-how-can-we-debug-a-ruby-script/164266/6 "2009-04-19T19:24:17Z")

</div>

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.
