(self, start, end)
| 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: |
no test coverage detected