MCPcopy Index your code
hub / github.com/nodejs/node / InterpretMemory

Method InterpretMemory

deps/v8/tools/grokdump.py:2458–2546  ·  view source on GitHub ↗
(self, start, end)

Source from the content-addressed store, hash-verified

2456 self.context = address
2457
2458 def InterpretMemory(self, start, end):
2459 # On 64 bit we omit frame pointers, so we have to do some more guesswork.
2460 frame_pointer = 0
2461 if not self.reader.Is64():
2462 frame_pointer = self.reader.ExceptionFP()
2463 # Follow the framepointer into the address range
2464 while frame_pointer and frame_pointer < start:
2465 frame_pointer = self.reader.ReadUIntPtr(frame_pointer)
2466 if not self.reader.IsExceptionStackAddress(frame_pointer) or \
2467 not frame_pointer:
2468 frame_pointer = 0
2469 break
2470 in_oom_dump_area = False
2471 is_stack = self.reader.IsExceptionStackAddress(start)
2472 free_space_end = 0
2473 ptr_size = self.reader.TaggedPointerSize()
2474
2475 for slot in range(start, end, ptr_size):
2476 if not self.reader.IsValidAddress(slot):
2477 print("%s: Address is not contained within the minidump!" % slot)
2478 return
2479 maybe_address = self.reader.ReadUIntPtr(slot)
2480 address_info = []
2481 # Mark continuous free space objects
2482 if slot == free_space_end:
2483 address_info.append("+")
2484 elif slot <= free_space_end:
2485 address_info.append("|")
2486 else:
2487 free_space_end = 0
2488
2489 heap_object = self.SenseObject(maybe_address, slot)
2490 if heap_object:
2491 # Detect Free-space ranges
2492 if isinstance(heap_object, KnownMap) and \
2493 heap_object.known_name == "FreeSpaceMap":
2494 # The free-space length is is stored as a Smi in the next slot.
2495 length = self.reader.ReadTagged(slot + ptr_size)
2496 if self.heap.IsSmi(length):
2497 length = self.heap.SmiUntag(length)
2498 free_space_end = slot + length - ptr_size
2499 address_info.append(str(heap_object))
2500 relative_offset = self.heap.RelativeOffset(slot, maybe_address)
2501 if relative_offset:
2502 address_info.append(relative_offset)
2503 if maybe_address == self.context:
2504 address_info.append("CONTEXT")
2505
2506 maybe_address_contents = None
2507 if is_stack:
2508 if self.reader.IsExceptionStackAddress(maybe_address):
2509 maybe_address_contents = \
2510 self.reader.ReadUIntPtr(maybe_address) & 0xFFFFFFFF
2511 if maybe_address_contents == 0xdecade00:
2512 in_oom_dump_area = True
2513 if frame_pointer == 0:
2514 frame_pointer = self.TryInferFramePointer(slot, maybe_address)
2515 if frame_pointer != 0:

Callers 2

_AnalyzeMinidumpFunction · 0.95
do_ddMethod · 0.80

Calls 15

SenseObjectMethod · 0.95
TryInferFramePointerMethod · 0.95
TryInferContextMethod · 0.95
strFunction · 0.85
PrinterClass · 0.85
Is64Method · 0.80
ExceptionFPMethod · 0.80
ReadUIntPtrMethod · 0.80
IsValidAddressMethod · 0.80
ReadTaggedMethod · 0.80
IsSmiMethod · 0.80

Tested by

no test coverage detected