(self, message_slot, start, end,
print_message)
| 2363 | return stack_start |
| 2364 | |
| 2365 | def TryExtractOldStyleStackTrace(self, message_slot, start, end, |
| 2366 | print_message): |
| 2367 | ptr_size = self.reader.MachinePointerSize() |
| 2368 | if message_slot == 0: |
| 2369 | """ |
| 2370 | On Mac we don't always get proper magic markers, so just try printing |
| 2371 | the first long ascii string found on the stack. |
| 2372 | """ |
| 2373 | magic1 = None |
| 2374 | magic2 = None |
| 2375 | message_start, message = self.FindFirstAsciiString(start, end, 128) |
| 2376 | if message_start is None: |
| 2377 | return start |
| 2378 | else: |
| 2379 | message_start = self.reader.ReadUIntPtr(message_slot + ptr_size * 4) |
| 2380 | message = self.reader.ReadAsciiString(message_start) |
| 2381 | stack_start = message_start + len(message) + 1 |
| 2382 | # Make sure the address is word aligned |
| 2383 | stack_start = stack_start - (stack_start % ptr_size) |
| 2384 | if magic1 is None: |
| 2385 | print("Stack Message:") |
| 2386 | print(" message start: %s" % self.heap.FormatIntPtr(message_start)) |
| 2387 | print(" stack_start: %s" % self.heap.FormatIntPtr(stack_start )) |
| 2388 | else: |
| 2389 | ptr1 = self.reader.ReadUIntPtr(slot + ptr_size * 2) |
| 2390 | ptr2 = self.reader.ReadUIntPtr(slot + ptr_size * 3) |
| 2391 | print("Stack Message:") |
| 2392 | print(" magic1: %s" % self.heap.FormatIntPtr(magic1)) |
| 2393 | print(" magic2: %s" % self.heap.FormatIntPtr(magic2)) |
| 2394 | print(" ptr1: %s" % self.heap.FormatIntPtr(ptr1)) |
| 2395 | print(" ptr2: %s" % self.heap.FormatIntPtr(ptr2)) |
| 2396 | print(" message start: %s" % self.heap.FormatIntPtr(message_start)) |
| 2397 | print(" stack_start: %s" % self.heap.FormatIntPtr(stack_start )) |
| 2398 | print("") |
| 2399 | self.FormatStackTrace(message, print_message) |
| 2400 | return stack_start |
| 2401 | |
| 2402 | def FormatStackTrace(self, message, print_message): |
| 2403 | if not print_message: |
no test coverage detected