(self, f, slot, start, end, print_message)
| 3003 | return start |
| 3004 | |
| 3005 | def output_stack_trace(self, f, slot, start, end, print_message): |
| 3006 | ptr_size = self.reader.MachinePointerSize() |
| 3007 | assert self.reader.ReadUIntPtr(slot) & 0xFFFFFFFF == STACK_TRACE_MARKER |
| 3008 | # Look for the mid marker after the start slot. |
| 3009 | mid_slot = self.reader.FindPtr(STACK_TRACE_MID_MARKER, start + ptr_size, |
| 3010 | start + ptr_size * 100) |
| 3011 | if not mid_slot: |
| 3012 | return self.output_old_stack_trace(f, slot, start, end, print_message) |
| 3013 | end_search = mid_slot + (32 * 1024) + (4 * ptr_size) |
| 3014 | end_slot = self.reader.FindPtr(STACK_TRACE_END_MARKER, end_search, |
| 3015 | end_search + ptr_size * 512) |
| 3016 | if not end_slot: |
| 3017 | return start |
| 3018 | |
| 3019 | f.write("<h3>PushStackTraceAndDie Stack Message (start=%s):</h3>" % |
| 3020 | self.format_address(slot)) |
| 3021 | slot += ptr_size |
| 3022 | value = self.reader.ReadUIntPtr(slot) |
| 3023 | f.write(f"<b>isolate</b>: {self.format_address(value)}<br>") |
| 3024 | slot += ptr_size |
| 3025 | i = 0 |
| 3026 | while slot < mid_slot: |
| 3027 | value = self.reader.ReadUIntPtr(slot) |
| 3028 | try: |
| 3029 | obj = self.format_object(value) |
| 3030 | except Exception as e: |
| 3031 | obj = str(e) |
| 3032 | f.write(f"<b>ptr{i}</b>: {self.format_address(value)} {obj}<br>") |
| 3033 | slot += ptr_size |
| 3034 | i += 1 |
| 3035 | slot = mid_slot + ptr_size |
| 3036 | for i in range(4): |
| 3037 | value = self.reader.ReadUIntPtr(slot) |
| 3038 | try: |
| 3039 | obj = self.format_object(value) |
| 3040 | except Exception as e: |
| 3041 | obj = str(e) |
| 3042 | f.write(f"<b>codeObject{i}</b>: {self.format_address(value)} {obj}<br>") |
| 3043 | slot += ptr_size |
| 3044 | f.write("<b>message start</b>: %s<br>" % self.format_address(slot)) |
| 3045 | stack_start = end_slot + ptr_size |
| 3046 | f.write("<b>stack_start</b>: %s<br>" % self.format_address(stack_start)) |
| 3047 | (message_start, message) = self.padawan.FindFirstAsciiString(slot) |
| 3048 | if print_message and message is not None: |
| 3049 | f.write("<a href='#eom'>Scroll to end of message...</a><br>") |
| 3050 | self.output_stack_trace_message(f, message) |
| 3051 | f.write("<span id=eom></span>") |
| 3052 | return stack_start |
| 3053 | |
| 3054 | def output_old_stack_trace(self, f, slot, start, end, print_message): |
| 3055 | ptr_size = self.reader.MachinePointerSize() |
no test coverage detected