Report abuse


			
class MemoryProfiler
  def initialize(method_name)
    @object_ids = []
    @leaked_objects = []
    @methodlog = "#{method_name}_profile.log"
  end

  def start
    GC.start
    ObjectSpace.each_object do |o|
      @object_ids << o.object_id
    end
  end

  def end
    GC.start
    ObjectSpace.each_object do |o|
      @leaked_objects << o.object_id
    end


    @leaked_objects = @leaked_objects - @object_ids

    puts "Oops..You've got #{@leaked_objects.size} screwed up objects!!" unless @leaked_objects.empty?

    File.open(@methodlog,'w') do |f|
      @leaked_objects.each do |o|
        begin
          f.puts ObjectSpace._id2ref(o).inspect
        rescue Exception => e
          puts "Something wrong happened while processing object #{o}"
        end
      end
    end
  end
end

class << self

  def leaker
    begin
      puts"hello"
      x = 1
      nil
    end
  end
end

mp = MemoryProfiler.new("leaker")
mp.start
leaker
mp.end