diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2023-03-31 03:05:29 -0700 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2023-03-31 03:05:30 -0700 |
commit | 0f368bfb7b82148cd8d2795820e5bb60d542dc33 (patch) | |
tree | 64fa3c2d84e12816e5b0cd6813dbcaf49ed58de7 /misc | |
parent | 98347c251a9c73eba51ffe50519e18334320ac91 (diff) |
gdb: Show params and locals in cfp
Diffstat (limited to 'misc')
-rw-r--r-- | misc/gdb.py | 13 |
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)) |