我有一个用ObjectSpace.dump_all方法不明白的行为:我需要关闭我的ruby控制台才能得到不截断的结果。
如何复制:
1)打开irb控制台(用2.2.3、2.2.4、2.3.0进行测试)
$ irb2)运行以下脚本:
require 'objspace'
ObjectSpace.trace_object_allocations_start
dump = ObjectSpace.dump_all(output: :file)
cmd = "tail -1 #{dump.path}"
# => "tail -1 /var/folders/d2/xs3bvd7j1xb8t4bp188bbwc80000gn/T/rubyheap20160215-45059-6djhip.json"
`#{cmd}`
# => "{\"address\":\"0x7fb0822a7df0\", \"type\":\"NODE\", \"frozen\":true, \"node_type\":\"NODE_ARRAY\", \"references\":[\"0"3)在另一个控制台中,运行相同的尾命令:
$ tail -1 /var/folders/d2/xs3bvd7j1xb8t4bp188bbwc80000gn/T/rubyheap20160215-45059-6djhip.json
{"address":"0x7fb0822a7df0", "type":"NODE", "frozen":true, "node_type":"NODE_ARRAY", "references":["0%4)在这一步中,我们可以清楚地看到,转储不会以有效的json完成。好的,下一步:关闭irb控制台并重做:
$ tail -1 /var/folders/d2/xs3bvd7j1xb8t4bp188bbwc80000gn/T/rubyheap20160215-45059-6djhip.json
{"address":"0x7fb0822a7fa8", "type":"OBJECT", "class":"0x7fb08216ba68", "ivars":3, "references":["0x7fb0822a7f08"], "memsize":40, "flags":{"wb_protected":true, "old":true, "long_liv
ed":true, "marked":true}}现在,该文件是一个有效的Json。但是为什么要关闭irb控制台才能获得完整的导出呢?
发布于 2016-02-15 13:23:47
好的,dump_all返回一个打开的文件对象。在dump_all之后,您必须关闭该文件:
dump = ObjectSpace.dump_all(output: :file)
dump.closeThx Uri Agassi
https://stackoverflow.com/questions/35409079
复制相似问题