mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
ext/objspace/objspace_dump.c: print addresses consistently
The format addresses are printed in are different if you use `ObjectSpace.dump_all(output: :stdout)` vs. `ObjectSpace.dump_all(output: :string)` (or `ObjectSpace.dump`) due to differences in the underlying `vfprintf` implementation. Use %"PRIxPTR" instead to be consistent across both. Co-authored-by: Ashe Connor <ashe@kivikakk.ee> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
48291d5212
commit
c5768e4366
2 changed files with 63 additions and 7 deletions
|
@ -318,6 +318,62 @@ class TestObjSpace < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_dump_addresses_match_dump_all_addresses
|
||||
assert_in_out_err(%w[-robjspace], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error|
|
||||
begin;
|
||||
def dump_my_heap_please
|
||||
obj = Object.new
|
||||
puts ObjectSpace.dump(obj)
|
||||
ObjectSpace.dump_all(output: $stdout)
|
||||
end
|
||||
|
||||
dump_my_heap_please
|
||||
end;
|
||||
needle = JSON.parse(output.first)
|
||||
addr = needle['address']
|
||||
found = output.drop(1).find { |l| JSON.parse(l)['address'] == addr }
|
||||
assert found, "object #{addr} should be findable in full heap dump"
|
||||
end
|
||||
end
|
||||
|
||||
def test_dump_class_addresses_match_dump_all_addresses
|
||||
assert_in_out_err(%w[-robjspace], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error|
|
||||
begin;
|
||||
def dump_my_heap_please
|
||||
obj = Object.new
|
||||
puts ObjectSpace.dump(obj)
|
||||
ObjectSpace.dump_all(output: $stdout)
|
||||
end
|
||||
|
||||
dump_my_heap_please
|
||||
end;
|
||||
needle = JSON.parse(output.first)
|
||||
addr = needle['class']
|
||||
found = output.drop(1).find { |l| JSON.parse(l)['address'] == addr }
|
||||
assert found, "object #{addr} should be findable in full heap dump"
|
||||
end
|
||||
end
|
||||
|
||||
def test_dump_reference_addresses_match_dump_all_addresses
|
||||
assert_in_out_err(%w[-robjspace], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error|
|
||||
begin;
|
||||
def dump_my_heap_please
|
||||
obj = Object.new
|
||||
obj2 = Object.new
|
||||
obj2.instance_variable_set(:@ref, obj)
|
||||
puts ObjectSpace.dump(obj)
|
||||
ObjectSpace.dump_all(output: $stdout)
|
||||
end
|
||||
|
||||
dump_my_heap_please
|
||||
end;
|
||||
needle = JSON.parse(output.first)
|
||||
addr = needle['address']
|
||||
found = output.drop(1).find { |l| (JSON.parse(l)['references'] || []).include? addr }
|
||||
assert found, "object #{addr} should be findable in full heap dump"
|
||||
end
|
||||
end
|
||||
|
||||
def test_dump_all
|
||||
entry = /"bytesize":11, "value":"TEST STRING", "encoding":"UTF-8", "file":"-", "line":4, "method":"dump_my_heap_please", "generation":/
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue