mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-03 13:23:00 +08:00
gdb: Restore selected frame in print_frame_local_vars
PR gdb/23203 reports 'bt full' causing the currently selected frame to change, this issue is fixed in this commit. Add a new class scoped_restore_selected_frame that saves and restores the selected frame. Make use of this in print_frame_local_vars to restore the selected frame on exit. gdb/ChangeLog: PR gdb/23203 * frame.c (scoped_restore_selected_frame::scoped_restore_selected_frame): Define. (scoped_restore_selected_frame::~scoped_restore_selected_frame): Define. * frame.h (class scoped_restore_selected_frame): New class. * stack.c (print_frame_local_vars): Remove catching and rethrowing of any exception, use scoped_restore_selected_frame to restore the frame instead. gdb/testsuite/ChangeLog: PR gdb/23203 * gdb.base/bt-selected-frame.c: New file. * gdb.base/bt-selected-frame.exp: New file. * lib/gdb.exp (get_current_frame_number): New function.
This commit is contained in:
19
gdb/frame.h
19
gdb/frame.h
@ -164,6 +164,25 @@ struct frame_id
|
||||
int artificial_depth;
|
||||
};
|
||||
|
||||
/* Save and restore the currently selected frame. */
|
||||
|
||||
class scoped_restore_selected_frame
|
||||
{
|
||||
public:
|
||||
/* Save the currently selected frame. */
|
||||
scoped_restore_selected_frame ();
|
||||
|
||||
/* Restore the currently selected frame. */
|
||||
~scoped_restore_selected_frame ();
|
||||
|
||||
DISABLE_COPY_AND_ASSIGN (scoped_restore_selected_frame);
|
||||
|
||||
private:
|
||||
|
||||
/* The ID of the previously selected frame. */
|
||||
struct frame_id m_fid;
|
||||
};
|
||||
|
||||
/* Methods for constructing and comparing Frame IDs. */
|
||||
|
||||
/* For convenience. All fields are zero. This means "there is no frame". */
|
||||
|
Reference in New Issue
Block a user