Method: ObjectSpace.dump_all

Defined in:
lib/objspace.rb

.dump_all(output: :file, full: false, since: nil) ⇒ Object

call-seq:

  ObjectSpace.dump_all([output: :file]) # => #<File:/tmp/rubyheap20131125-88469-laoj3v.json>
  ObjectSpace.dump_all(output: :stdout) # => nil
  ObjectSpace.dump_all(output: :string) # => "{...}\n{...}\n..."
  ObjectSpace.dump_all(output:
    File.open('heap.json','w'))         # => #<File:heap.json>
  ObjectSpace.dump_all(output: :string,
    since: 42)                          # => "{...}\n{...}\n..."

Dump the contents of the ruby heap as JSON.

_since_ must be a non-negative integer or +nil+.

If _since_ is a positive integer, only objects of that generation and
newer generations are dumped. The current generation can be accessed using
GC::count.

Objects that were allocated without object allocation tracing enabled
are ignored. See ::trace_object_allocations for more information and
examples.

If _since_ is omitted or is +nil+, all objects are dumped.

This method is only expected to work with C Ruby.
This is an experimental method and is subject to change.
In particular, the function signature and output format are
not guaranteed to be compatible in future versions of ruby.


72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/objspace.rb', line 72

def dump_all(output: :file, full: false, since: nil)
  out = case output
  when :file, nil
    require 'tempfile'
    Tempfile.create(%w(rubyheap .json))
  when :stdout
    STDOUT
  when :string
    +''
  when IO
    output
  else
    raise ArgumentError, "wrong output option: #{output.inspect}"
  end

  ret = _dump_all(out, full, since)
  return nil if output == :stdout
  ret
end