(self, f, slot, start, end, print_message)
| 3052 | return stack_start |
| 3053 | |
| 3054 | def output_old_stack_trace(self, f, slot, start, end, print_message): |
| 3055 | ptr_size = self.reader.MachinePointerSize() |
| 3056 | assert self.reader.ReadUIntPtr(slot) & 0xFFFFFFFF == STACK_TRACE_MARKER |
| 3057 | header_size = 10 |
| 3058 | # Look for the end marker after the fields and the message buffer. |
| 3059 | end_search = start + (32 * 1024) + (header_size * ptr_size) |
| 3060 | end_slot = self.reader.FindPtr(STACK_TRACE_OLD_END_MARKER, end_search, |
| 3061 | end_search + ptr_size * 512) |
| 3062 | if not end_slot: |
| 3063 | return start |
| 3064 | f.write("<h3>PushStackTraceAndDie Stack Message (start=%s):</h3>" % |
| 3065 | self.format_address(slot)) |
| 3066 | slot += ptr_size |
| 3067 | for name in ("isolate", "ptr1", "ptr2", "ptr3", "ptr4", "ptr5", "ptr6", |
| 3068 | "codeObject1", "codeObject2", "codeObject3", "codeObject4"): |
| 3069 | value = self.reader.ReadUIntPtr(slot) |
| 3070 | f.write("<b>%s</b>: %s %s<br>" % |
| 3071 | (name.rjust(14), self.format_address(value), |
| 3072 | "" if name == "isolate" else self.format_object(value))) |
| 3073 | slot += ptr_size |
| 3074 | f.write("<b>message start</b>: %s<br>" % self.format_address(slot)) |
| 3075 | stack_start = end_slot + ptr_size |
| 3076 | f.write("<b>stack_start</b>: %s<br>" % self.format_address(stack_start)) |
| 3077 | (message_start, message) = self.padawan.FindFirstAsciiString(slot) |
| 3078 | if print_message and message is not None: |
| 3079 | f.write("<a href='#eom'>Scroll to end of message...</a><br>") |
| 3080 | self.output_stack_trace_message(f, message) |
| 3081 | f.write("<span id=eom></span>") |
| 3082 | return stack_start |
| 3083 | |
| 3084 | def output_stack_trace_message(self, f, message): |
| 3085 | ptr_size = self.reader.MachinePointerSize() |
no test coverage detected