Skip to content

Commit cb26f46

Browse files
authored
Merge pull request #2883 from apple/🍒/ganymede/91d3f73937b603b168a2be40f57a81efcc37da86
[lldb] Update register state parsing for JSON crashlogs
2 parents e8cf0b3 + e422c00 commit cb26f46

File tree

3 files changed

+14
-14
lines changed

3 files changed

+14
-14
lines changed

lldb/examples/python/crashlog.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def dump(self, prefix):
9797
if self.registers:
9898
print("%s Registers:" % (prefix))
9999
for reg in self.registers.keys():
100-
print("%s %-5s = %#16.16x" % (prefix, reg, self.registers[reg]))
100+
print("%s %-8s = %#16.16x" % (prefix, reg, self.registers[reg]))
101101

102102
def dump_symbolicated(self, crash_log, options):
103103
this_thread_crashed = self.app_specific_backtrace
@@ -156,6 +156,10 @@ def dump_symbolicated(self, crash_log, options):
156156
symbolicated_frame_address_idx += 1
157157
else:
158158
print(frame)
159+
if self.registers:
160+
print()
161+
for reg in self.registers.keys():
162+
print(" %-8s = %#16.16x" % (reg, self.registers[reg]))
159163

160164
def add_ident(self, ident):
161165
if ident not in self.idents:
@@ -488,27 +492,21 @@ def parse_threads(self, json_threads):
488492
thread.reason = json_thread['name']
489493
if json_thread.get('triggered', False):
490494
self.crashlog.crashed_thread_idx = idx
491-
self.registers = self.parse_thread_registers(
495+
thread.registers = self.parse_thread_registers(
492496
json_thread['threadState'])
493497
thread.queue = json_thread.get('queue')
494498
self.parse_frames(thread, json_thread.get('frames', []))
495499
self.crashlog.threads.append(thread)
496500
idx += 1
497501

498502
def parse_thread_registers(self, json_thread_state):
499-
idx = 0
500503
registers = dict()
501-
for json_reg in json_thread_state.get('x', []):
502-
key = str('x{}'.format(idx))
503-
value = int(json_reg['value'])
504-
registers[key] = value
505-
idx += 1
506-
507-
for register in ['lr', 'cpsr', 'fp', 'sp', 'esr', 'pc']:
508-
if register in json_thread_state:
509-
json_reg = json_thread_state[register]
510-
registers[register] = int(json_reg['value'])
511-
504+
for key, state in json_thread_state.items():
505+
try:
506+
value = int(state['value'])
507+
registers[key] = value
508+
except (TypeError, ValueError):
509+
pass
512510
return registers
513511

514512

lldb/test/Shell/ScriptInterpreter/Python/Crashlog/json.test

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
# CHECK: [ 0] {{.*}}out`foo + 16 at test.c
88
# CHECK: [ 1] {{.*}}out`bar + 8 at test.c
99
# CHECK: [ 2] {{.*}}out`main + 19 at test.c
10+
# CHECK: rbp = 0x00007ffeec22a530

lldb/test/Shell/ScriptInterpreter/Python/Crashlog/text.test

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
# CHECK: [ 0] {{.*}}out`foo + 16 at test.c
88
# CHECK: [ 1] {{.*}}out`bar + 8 at test.c
99
# CHECK: [ 2] {{.*}}out`main + 19 at test.c
10+
# CHECK: rbp = 0x00007ffee42d8020

0 commit comments

Comments
 (0)