Sha256: 27b3d6052189c3b073ad883cb17deb282b287f5a832f60675f1938470a47591d

Contents?: true

Size: 1.5 KB

Versions: 7

Compression:

Stored size: 1.5 KB

Contents

#!/usr/bin/env ruby
# $Id$

module TraceLineNumbers
  # Return an array of lines numbers that could be
  # stopped at given a file name of a Ruby program.

  def self.lnums_for_str src
    name = "#{Time.new.to_i}_#{rand(2**31)}"
    iseq = RubyVM::InstructionSequence.compile(src, name)
    lines = {}
    iseq.disasm.each_line{|line|
      if /^\d+ (\w+)\s+.+\(\s*(\d+)\)$/ =~ line
        insn = $1
        lineno = $2.to_i
        next unless insn == 'trace'
        lines[lineno] = true
        # p [lineno, line]
      end
    }
    lines.keys
  end

  def lnums_for_file(file)
    lnums_for_str(File.read(file))
  end
  module_function :lnums_for_file

  # Return an array of lines numbers that could be
  # stopped at given a file name of a Ruby program.
  # We assume the each line has \n at the end. If not
  # set the newline parameters to \n.
  def lnums_for_str_array(string_array, newline='')
    lnums_for_str(string_array.join(newline))
  end
  module_function :lnums_for_str_array
end

if __FILE__ == $0
  SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__
  # test_file = '../test/rcov-bug.rb'
  test_file = '../test/lnum-data/begin1.rb'
  if  File.exists?(test_file)
    puts TraceLineNumbers.lnums_for_file(test_file).inspect
    load(test_file, 0) # for later
  end
  puts TraceLineNumbers.lnums_for_file(__FILE__).inspect
  unless SCRIPT_LINES__.empty?
    key = SCRIPT_LINES__.keys.first
    puts key
    puts SCRIPT_LINES__[key]
    puts TraceLineNumbers.lnums_for_str_array(SCRIPT_LINES__[key]).inspect
  end
end

Version data entries

7 entries across 6 versions & 4 rubygems

Version Path
logstash-output-icinga-1.1.0 vendor/jruby/1.9/gems/debugger-linecache-1.2.0/lib/tracelines19.rb
solidus_backend-1.0.0.pre3 vendor/bundle/gems/debugger-linecache-1.2.0/lib/tracelines19.rb
solidus_backend-1.0.0.pre2 vendor/bundle/gems/debugger-linecache-1.2.0/lib/tracelines19.rb
solidus_backend-1.0.0.pre vendor/bundle/gems/debugger-linecache-1.2.0/lib/tracelines19.rb
candlepin-api-0.4.0 bundle/ruby/gems/debugger-linecache-1.2.0/lib/tracelines19.rb
candlepin-api-0.4.0 bundle/ruby/1.9.1/gems/debugger-linecache-1.2.0/lib/tracelines19.rb
debugger-linecache-1.2.0 lib/tracelines19.rb