[#407] New feature for Ruby? — Clemens.Hintze@...

Hi all,

27 messages 1999/07/01
[#413] Re: New feature for Ruby? — matz@... (Yukihiro Matsumoto) 1999/07/01

Hi Clemens,

[#416] Re: New feature for Ruby? — Clemens Hintze <c.hintze@...> 1999/07/01

On Thu, 01 Jul 1999, Yukihiro Matsumoto wrote:

[#418] Re: New feature for Ruby? — gotoken@... (GOTO Kentaro) 1999/07/01

Hi

[#426] Re: New feature for Ruby? — gotoken@... (GOTO Kentaro) 1999/07/02

Hi,

[#440] Now another totally different ;-) — Clemens Hintze <c.hintze@...>

Hi,

21 messages 1999/07/09
[#441] Re: Now another totally different ;-) — matz@... (Yukihiro Matsumoto) 1999/07/09

Hi,

[#442] Re: Now another totally different ;-) — Clemens Hintze <c.hintze@...> 1999/07/09

On Fri, 09 Jul 1999, you wrote:

[#443] — Michael Hohn <hohn@...>

Hello,

26 messages 1999/07/09
[#444] interactive ruby, debugger — gotoken@... (GOTO Kentaro) 1999/07/09

Hi Michael,

[ruby-talk:00454] Re: interactive ruby, debugger

From: "NAKAMURA, Hiroshi" <nakahiro@...>
Date: 1999-07-11 05:42:37 UTC
List: ruby-talk #454
Hi gotoken,

It stopped raining in Tokyo. How is it in Hokkaido?

> From: GOTO Kentaro [mailto:gotoken@math.sci.hokudai.ac.jp]
> Sent: Sunday, July 11, 1999 4:12 AM

> >>   i(nfo)
> >
> >Gotoken-san, I couldn't find it in debug.rb in ruby/1.3.4-990625...
> >Old spec? for example, in ruby-1.2 or younger?
> 
> Sorry, I misunderstood; 
> There is `info break' only, now and then. 

I feel easy. Unlike many rubyist, I began to use ruby(1.2.3)
from March of this year. I surely have many things to know about ruby.

> >By the way, I made a patch since the action was more modeled on gdb.
> >'list' command lists just 10 line.
> >'list' command memorizes the line number listed before, for each target-file.
> >'list -' for listing previous 10 lines.
> >'list 0' does not cause error.
> >'up' and 'down' puts the stack frame where you are.
> 
> It seems helpful.

Thanks!
But I made several bugs... Once I had tried, I might understand it
immediately... An 'up' command at the top of the stack frame caused
to jump to the bottom... (;_;)

This is a patch again, from /home/cvs/ruby/lib/debug.rb.

	/	/	/

Index: debug.rb
===================================================================
RCS file: /home/cvs/ruby/lib/debug.rb,v
retrieving revision 1.1.1.2.2.3
diff -u -r1.1.1.2.2.3 debug.rb
--- debug.rb	1999/06/24 04:24:08	1.1.1.2.2.3
+++ debug.rb	1999/07/11 05:36:17
@@ -6,7 +6,7 @@
     @break_points = []
     @stop_next = 1
     @frames = [nil]
-    @frame_pos = nil
+    @frame_pos = nil	# nil means not '0' but `unknown'.
     @last_file = nil
     @scripts = {}
   end
@@ -23,19 +23,23 @@
       val
     rescue
       at = caller(0)
-      printf "%s:%s\n", at.shift, $!
+      STDOUT.printf "%s:%s\n", at.shift, $!
       for i in at
 	break if i =~ /`debug_(eval|command)'$/ #`
-	printf "\tfrom %s\n", i
+	STDOUT.printf "\tfrom %s\n", i
       end
     end
   end
 
   def debug_command(file, line, id, binding)
+    binding_file = file
+    binding_line = line
+    debug_line = {}
     if (ENV['EMACS'] == 't')
-      printf "\032\032%s:%d:\n", file, line
+      STDOUT.printf "\032\032%s:%d:\n", binding_file, binding_line
     else
-      printf "%s:%d:%s", file, line, line_at(file, line)
+      STDOUT.printf "%s:%d:%s", binding_file, binding_line,
+	line_at(binding_file, binding_line)
     end
     @frames[-1] = binding
     STDOUT.print "(rdb:-) "
@@ -60,12 +64,13 @@
 	else
 	  pname = pos = pos.intern.id2name
 	end
-	printf "Set breakpoint %d at %s:%s\n", @break_points.size, file, pname
+	STDOUT.printf "Set breakpoint %d at %s:%s\n", @break_points.size, file,
+	  pname
 	@break_points.push [file, pos]
       when /^b(reak)?$/, /^info b(reak)?$/
 	n = 0
 	for f, p in @break_points
-	  printf "%d %s:%s\n", n, f, p
+	  STDOUT.printf "%d %s:%s\n", n, f, p
 	  n += 1
 	end
       when /^del(ete)?(\s+(\d+))?$/
@@ -83,10 +88,10 @@
 	  pos = Integer(pos)
 	  if @break_points[pos]
 	    bp = @break_points[pos]
-	    printf "Clear breakpoint %d at %s:%s\n", pos, bp[0], bp[1]
+	    STDOUT.printf "Clear breakpoint %d at %s:%s\n", pos, bp[0], bp[1]
 	    @break_points[pos] = nil
 	  else
-	    printf "Breakpoint %d is not defined\n", pos
+	    STDOUT.printf "Breakpoint %d is not defined\n", pos
 	  end
 	end
       when /^c(ont)?$/
@@ -123,6 +128,10 @@
 	  @frame_pos = 0
 	else
 	  binding = @frames[@frame_pos]
+	  frame_info = caller(4)[-(@frame_pos+1)]
+	  STDOUT.print "at #{frame_info}\n"
+	  frame_info.sub( /:in `.*'$/, '' ) =~ /^(.*):(\d+)$/
+	  binding_file, binding_line = $1, $2.to_i
 	end
       when /^down\s*(\d+)??$/
 	if $1
@@ -133,12 +142,16 @@
 	unless @frame_pos
 	  @frame_pos = @frames.size - 1
 	end
-	if lev >= @frames.size or @frame_pos and @frame_pos+lev >= @frames.size 
+	@frame_pos += lev
+	if @frame_pos >= @frames.size
 	  STDOUT.print "at stack bottom\n"
 	  @frame_pos = nil
 	else
-	  @frame_pos += lev
 	  binding = @frames[@frame_pos]
+	  frame_info = caller(4)[-(@frame_pos+1)]
+	  STDOUT.print "at #{frame_info}\n"
+	  frame_info.sub( /:in `.*'$/, '' ) =~ /^(.*):(\d+)$/
+	  binding_file, binding_line = $1, $2.to_i
 	end
       when /^fin(ish)?$/
 	@finish_pos = @frames.size
@@ -151,32 +164,39 @@
       when /^where$/
 	at = caller(4)
 	for i in at
-	  printf " %s\n", i
+	  STDOUT.printf " %s\n", i
 	end
       when /^l(ist)?(\s+(.*))?$/
-	if $3
+	if !$3
+	  b = debug_line[binding_file]? debug_line[binding_file] + 10 :
+	    binding_line - 5
+	  e = b + 9
+	elsif $3 == '-'
+	  b = debug_line[binding_file]? debug_line[binding_file] - 10 :
+	    binding_line - 5
+	  e = b + 9
+	else
 	  b, e = $3.split(/[-,]/)
-	  b = Integer(b)-1
 	  if e
-	    e = Integer(e)-1
+	    b = Integer(b)
+	    e = Integer(e)
 	  else
-	    e = b + 10
+	    b = Integer(b)-5
+	    e = b + 9
 	  end
 	end
-	unless b
-	  b = line - 1
-	  e = line + 9
-	end
-	p [b,e]
-	line_at(file, line)
-	if lines = @scripts[file] and lines != TRUE
-	  n = b+1
-	  for l in lines[b..e]
-	    printf "%4d %s", n, l
-	    n += 1
+	debug_line[binding_file] = b
+	STDOUT.print "[#{b}, #{e}] in #{binding_file}\n"
+	line_at(binding_file, binding_line)
+	if lines = @scripts[binding_file] and lines != TRUE
+	  n = 0
+	  b.upto(e) do |n|
+	    if n > 0 && lines[n-1]
+	      STDOUT.printf "%4d %s\n", n, lines[n-1].chomp
+	    end
 	  end
 	else
-	  printf "no sourcefile available for %s\n", file
+	  STDOUT.printf "no sourcefile available for %s\n", binding_file
 	end
       when /^p\s+/
 	p debug_eval($', binding) #'
@@ -224,7 +244,7 @@
     file = File.basename(file)
     if @break_points.include? [file, pos]
       index = @break_points.index([file, pos])
-      printf "Breakpoint %d, %s at %s:%s\n",
+      STDOUT.printf "Breakpoint %d, %s at %s:%s\n",
 	index, debug_funcname(id), file, pos
       return TRUE
     end

In This Thread