Philip R. wrote:
Dale, Darren,
On Tue, 2006-06-20 at 05:04 +0900, Dale M. wrote:
$stdin = IO.popen("cat parsefile")
You can now start debugging. All input will be read from the result of
the IO.popen call.
–Dale M.
Using both this method and:
ruby -r debug t1.rb < parsefile (which I had already tried)
do strange things - eg:
[root@prix bin]# ruby -r debug t1.rb
Debug.rb
Emacs support available.
t1.rb:6:require ‘ftools’
(rdb:1) $stdin = IO.popen(“cat t”)
#IO:0xb7f16708
(rdb:1) Received: from localhost (HELO localhost.localdomain)
(127.0.0.1) by prix.pricom.com.au with SMTP; 20 Jun 2006 08:11:43 -0000
t1.rb:6:compile error
t1.rb:6: syntax error, unexpected ‘:’, expecting $end
.
.
similar repeated errors for the rest of the parsefile ('t")
The top of t1.rb looks like:
#!/usr/bin/ruby
qmail-pfilter.rb
v1.1
2006-03-14
require ‘ftools’ (line 6)
The first line of the mail item - text file “t” (parsefile) is read in
and then I get the compile/syntax errors - these continue for the whole
of the rest of the text file but I need to be able to step through the
program one line at a time from the parsefile . .
What is going on?
I don’t know. I am not sure what your program is doing. Is there anyway
you could share the source. Or could you reduce the program down to a
simple case that still causes the problem.
Here is a very simple program that attempts to show a couple of things.
-
I required ‘ftools’ since that seems to be where you are getting into
trouble. It is not needed by the program. Then stepped in the debugger
to see what happens when the “require ‘ftools’” line is processed. You
should do the same.
-
The program takes the piped input and burps it back out again with a
prefix. The input is just the program source itself.
------ d.rb ------
#!/usr/bin/env ruby
require ‘ftools’
$stdin.each_line do |line|
puts "BUBBA: "+line
end
puts “BUBBA END.”
------ EOF ------
Here is my output when I stepped through the program in the debugger.
------ output ------
ruby -r debug d.rb
Debug.rb
Emacs support available.
d.rb:3:require ‘ftools’
(rdb:1) $stdin = IO.popen( “cat d.rb” )
#IO:0x401f5f40
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:1:class << File
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:3: BUFSIZE = 8 * 1024
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:5: def catname from, to
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:15: def syscopy from, to
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:41: def copy from, to, verbose = false
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:46: alias cp copy
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:50: def move from, to, verbose = false
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:75: alias mv move
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:81: def compare from, to, verbose = false
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:112: alias cmp compare
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:116: def safe_unlink(*files)
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:127: alias rm_f safe_unlink
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:129: def makedirs(*dirs)
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:148: alias mkpath makedirs
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:150: alias o_chmod chmod
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:152: vsave, $VERBOSE = $VERBOSE, false
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:153: def chmod(mode, *files)
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:158: $VERBOSE = vsave
(rdb:1) s
/usr/lib/ruby/1.8/ftools.rb:160: def install(from, to, mode = nil,
verbose = false)
(rdb:1) s
d.rb:5:$stdin.each_line do |line|
(rdb:1) s
d.rb:6: puts "BUBBA: "+line
(rdb:1) s
BUBBA: #!/usr/bin/env ruby
d.rb:6: puts "BUBBA: "+line
(rdb:1) s
BUBBA:
d.rb:6: puts "BUBBA: "+line
(rdb:1) s
BUBBA: require ‘ftools’
d.rb:6: puts "BUBBA: "+line
(rdb:1) s
BUBBA:
d.rb:6: puts "BUBBA: "+line
(rdb:1) s
BUBBA: $stdin.each_line do |line|
d.rb:6: puts "BUBBA: "+line
(rdb:1) s
BUBBA: puts "BUBBA: "+line
d.rb:6: puts "BUBBA: "+line
(rdb:1) s
BUBBA: end
d.rb:6: puts "BUBBA: "+line
(rdb:1) s
BUBBA: puts “BUBBA END.”
d.rb:8:puts “BUBBA END.”
(rdb:1) s
BUBBA END.
------ EOF ------
You should attempt to step through your program to see what happens. You
may want to turn on trace.