gdb: Show params and locals in cfp
This commit is contained in:
parent
98347c251a
commit
0f368bfb7b
13
misc/gdb.py
13
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')
|
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)'))
|
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)))
|
print('CFP (count={}, addr=0x{:x}):'.format(cfp_count, self.get_int(cfp)))
|
||||||
gdb.execute(f'p *({cfp})')
|
gdb.execute(f'p *({cfp})')
|
||||||
print()
|
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:')
|
print('Env:')
|
||||||
self.print_stack(cfp, -3, self.rp(cfp, -3))
|
self.print_stack(cfp, -3, self.rp(cfp, -3))
|
||||||
self.print_stack(cfp, -2, self.specval(cfp, -2))
|
self.print_stack(cfp, -2, self.specval(cfp, -2))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user