[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

REG: How can we debug a ruby script

ext-golla.anil-kumar

3/30/2009 3:52:00 PM

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 =3D=3D 0
f =3D 1
n.downto(1) do |i|
f *=3D 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
=3D> 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 =3D Config # com=
patibility for ruby-1.9
(rdb:1) n
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:154:CROSS_COMPILING =3D nil u=
nless defined? CROSS_COMPILING
(rdb:1) n
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:154:CROSS_COMPILING =3D nil u=
nless 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




5 Answers

Brian Candler

3/31/2009 9:14:00 AM

0

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.
--
Posted via http://www.ruby-....

ext-golla.anil-kumar

4/19/2009 9:43:00 AM

0

Hi,
Using the below method mention the below mail, I was successfully able to r=
un and debug the script.
But when I run unittest class, the flow goes into testcase case class as be=
low.

Testscript=20
require "test/unit"
=20
class TestSimpleNumber < Test::Unit::TestCase
=20
def test_simple
assert_equal("abc", "abc" )
=20
end
=20
def test_typecheck
assert_equal("abc", "abc" )
end
=20
def test_failure
assert_equal("abc", "abc" )
end
=20
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: noti=
fy_listeners(channel, value)
(rdb:1)


Please help me in this regard.

Thanks,
Anil kumar.


>-----Original Message-----
>From: b.candler@pobox.com [mailto:b.candler@pobox.com]=20
>Sent: 31 March, 2009 12:14
>To: ruby-talk ML
>Subject: Re: REG: How can we debug a ruby script
>
>Something in your environment is making ruby do -rubygems (require
>'rubygems')
>Perhaps the RUBYOPT environment variable is set, because I can=20
>replicate your problem like this:
>
>$ export RUBYOPT=3D-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=20
>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,=20
>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.
>--
>Posted via http://www.ruby-....
>
>=

Phlip

4/19/2009 3:00:00 PM

0

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!

--
Phlip


Phlip

4/19/2009 3:18:00 PM

0

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

Brian Candler

4/19/2009 5:24:00 PM

0

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.
--
Posted via http://www.ruby-....