debugger issue

P

pat eyler

I'm running into an unexpected issue with the debugger, and I'm hoping some=
one
here can help me out. I' ve got a short program like this (stolen directly
from zenspider's RubyInline tutorial):

-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D=3D-=3D-=3D-=3D-=3D=
-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-
#!/usr/local/bin/ruby -w

class Array

def average
result =3D 0
self.each { |x| result +=3D x }
result / self.size.to_f
end

end

max_loop =3D (ARGV.shift || 5).to_i
max_size =3D (ARGV.shift || 100_000).to_i
a =3D (1..max_size).to_a

1.upto(max_loop) do
avg =3D a.average
$stderr.print "."
end
$stderr.puts ""
-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D=3D-=3D-=3D-=3D-=3D=
-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-


Everytime I step to line 7 (the self.each ... line) or do a step nnn which
executes line 7, the debugger stops there. Neither step or next will move
past this line. If I try to continue the program, it will run to the next
breakpoint or end of the program.


-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D=3D-=3D-=3D-=3D-=3D=
-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-
pate@linux:~/scripts> ruby -rdebug averager.rb
Debug.rb
Emacs support available.

averager.rb:3:class Array
(rdb:1) s 13
averager.rb:7: self.each { |x| result +=3D x }
(rdb:1) s
averager.rb:7: self.each { |x| result +=3D x }
(rdb:1) s
averager.rb:7: self.each { |x| result +=3D x }
(rdb:1) s
averager.rb:7: self.each { |x| result +=3D x }
(rdb:1) n
averager.rb:7: self.each { |x| result +=3D x }
(rdb:1) n
averager.rb:7: self.each { |x| result +=3D x }
(rdb:1) n
averager.rb:7: self.each { |x| result +=3D x }
(rdb:1) n 20
averager.rb:7: self.each { |x| result +=3D x }
(rdb:1) c
.....
pate@linux:~/scripts>
-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D=3D-=3D-=3D-=3D-=3D=
-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-


Any idea what's going on? Is this a bug in the debugger, or am I
misunderstanding something?


--=20
thanks,
-pate
 
P

pat eyler

pat eyler wrote:
=20
max_size =3D (ARGV.shift || 10).to_i
=20


this minimizes, but doesn't solve, the problem. stepping to line 13=20
shouldn't trip on line 7 at all should it, or should it?

--
Florian Frank
=20
=20
=20


--=20
thanks,
-pate
 
F

Florian Frank

pat said:
this minimizes, but doesn't solve, the problem. stepping to line 13
shouldn't trip on line 7 at all should it, or should it?
The block call is a step on its own, you can "s 99990" if you really
want. The "line" is a bit misleading, it's probably named after the line
event of the trace function.
 
R

Robert Klemme

pat said:
I'm running into an unexpected issue with the debugger, and I'm
hoping someone here can help me out. I' ve got a short program like
this (stolen directly from zenspider's RubyInline tutorial):

-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#!/usr/local/bin/ruby -w

class Array

def average
result = 0
self.each { |x| result += x }
result / self.size.to_f
end

end

max_loop = (ARGV.shift || 5).to_i
max_size = (ARGV.shift || 100_000).to_i
a = (1..max_size).to_a

1.upto(max_loop) do
avg = a.average
$stderr.print "."
end
$stderr.puts ""
-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


Everytime I step to line 7 (the self.each ... line) or do a step nnn
which executes line 7, the debugger stops there. Neither step or
next will move past this line. If I try to continue the program, it
will run to the next breakpoint or end of the program.


-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
pate@linux:~/scripts> ruby -rdebug averager.rb
Debug.rb
Emacs support available.

averager.rb:3:class Array
(rdb:1) s 13
averager.rb:7: self.each { |x| result += x }
(rdb:1) s
averager.rb:7: self.each { |x| result += x }
(rdb:1) s
averager.rb:7: self.each { |x| result += x }
(rdb:1) s
averager.rb:7: self.each { |x| result += x }
(rdb:1) n
averager.rb:7: self.each { |x| result += x }
(rdb:1) n
averager.rb:7: self.each { |x| result += x }
(rdb:1) n
averager.rb:7: self.each { |x| result += x }
(rdb:1) n 20
averager.rb:7: self.each { |x| result += x }
(rdb:1) c
....
pate@linux:~/scripts>
-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


Any idea what's going on? Is this a bug in the debugger, or am I
misunderstanding something?

My guess would be that Array#each is a method implemented in C and that
your block is just a single line block. The debugger can't step into
Array#each and maybe it cannot stop in the block because it's on the same
line. Did you try to convert the block to a multiline block?

If you step over that line then you execute a single each call, which
happens to execute multple callbacks of the block.

Kind regards

robert
 
L

Lothar Scholz

Hello Robert,


RK> My guess would be that Array#each is a method implemented in C and that
RK> your block is just a single line block. The debugger can't step into
RK> Array#each and maybe it cannot stop in the block because it's on the same
RK> line. Did you try to convert the block to a multiline block?

Correct it is a fundamental problem with the current ruby
implementation and it does work when there are two code lines like

def average
result = 0
self.each { |x|
dummy = 1
result += x
}
result / self.size.to_f
end
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,149
Members
46,695
Latest member
StanleyDri

Latest Threads

Top