summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-03-31 03:05:29 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2023-03-31 03:05:30 -0700
commit0f368bfb7b82148cd8d2795820e5bb60d542dc33 (patch)
tree64fa3c2d84e12816e5b0cd6813dbcaf49ed58de7 /misc
parent98347c251a9c73eba51ffe50519e18334320ac91 (diff)
downloadruby-0f368bfb7b82148cd8d2795820e5bb60d542dc33.tar.gz
gdb: Show params and locals in cfp
Diffstat (limited to 'misc')
-rw-r--r--misc/gdb.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/misc/gdb.py b/misc/gdb.py
index 6f26fc1111..520b673317 100644
--- a/misc/gdb.py
+++ b/misc/gdb.py
@@ -40,11 +40,22 @@ class CFP(gdb.Command):
end_cfp = self.get_int('ruby_current_ec->vm_stack + ruby_current_ec->vm_stack_size')
cfp_count = int((end_cfp - self.get_int('ruby_current_ec->cfp')) / self.get_int('sizeof(rb_control_frame_t)'))
-
print('CFP (count={}, addr=0x{:x}):'.format(cfp_count, self.get_int(cfp)))
gdb.execute(f'p *({cfp})')
print()
+ local_size = self.get_int(f'{cfp}->iseq->body->local_table_size - {cfp}->iseq->body->param.size')
+ param_size = self.get_int(f'{cfp}->iseq->body->param.size')
+ print(f'Params (size={param_size}):')
+ for i in range(-3 - local_size - param_size, -3 - local_size):
+ self.print_stack(cfp, i, self.rp(cfp, i))
+ print()
+
+ print(f'Locals (size={local_size}):')
+ for i in range(-3 - local_size, -3):
+ self.print_stack(cfp, i, self.rp(cfp, i))
+ print()
+
print('Env:')
self.print_stack(cfp, -3, self.rp(cfp, -3))
self.print_stack(cfp, -2, self.specval(cfp, -2))