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)?
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:
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.
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)
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:
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.
-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.