gdb.py: Support dumping a dummy frame [ci skip]
This commit is contained in:
parent
c65856d44f
commit
b35a222348
@ -56,16 +56,17 @@ class CFP(gdb.Command):
|
|||||||
except SystemExit:
|
except SystemExit:
|
||||||
return
|
return
|
||||||
cfp = f'(ruby_current_ec->cfp + ({args.uplevel}))'
|
cfp = f'(ruby_current_ec->cfp + ({args.uplevel}))'
|
||||||
|
end_cfp = self.get_int('ruby_current_ec->vm_stack + ruby_current_ec->vm_stack_size')
|
||||||
|
cfp_index = int((end_cfp - self.get_int(cfp) - 1) / self.get_int('sizeof(rb_control_frame_t)'))
|
||||||
|
|
||||||
if args.all:
|
if args.all:
|
||||||
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)')) - 1 # exclude dummy CFP
|
cfp_count = int((end_cfp - self.get_int('ruby_current_ec->cfp')) / self.get_int('sizeof(rb_control_frame_t)')) - 1 # exclude dummy CFP
|
||||||
for i in range(cfp_count):
|
for i in range(cfp_count):
|
||||||
print('-' * 80)
|
print('-' * 80)
|
||||||
self.invoke(str(cfp_count - i - 1), from_tty)
|
self.invoke(str(cfp_count - i - 1), from_tty)
|
||||||
return
|
return
|
||||||
|
|
||||||
print('CFP (addr=0x{:x}, uplevel={}):'.format(self.get_int(cfp), args.uplevel))
|
print('CFP (addr=0x{:x}, index={}):'.format(self.get_int(cfp), cfp_index))
|
||||||
gdb.execute(f'p *({cfp})')
|
gdb.execute(f'p *({cfp})')
|
||||||
print()
|
print()
|
||||||
|
|
||||||
@ -91,6 +92,8 @@ class CFP(gdb.Command):
|
|||||||
self.print_env(cfp, -1, self.frame_types(cfp, -1))
|
self.print_env(cfp, -1, self.frame_types(cfp, -1))
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
# We can't calculate BP for the first frame
|
||||||
|
if cfp_index > 0:
|
||||||
if args.stack_size is not None:
|
if args.stack_size is not None:
|
||||||
stack_size = args.stack_size
|
stack_size = args.stack_size
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user