* thread.c (restore_selected_frame): Handle frame_level == -1.
(make_cleanup_restore_current_thread): Use get_selected_frame_if_set. * frame.h (get_selected_frame_if_set): Declare. * frame.c (get_selected_frame_if_set): New function.
This commit is contained in:
parent
eceb0c5f49
commit
eb8c062170
4 changed files with 34 additions and 1 deletions
16
gdb/thread.c
16
gdb/thread.c
|
@ -1019,6 +1019,13 @@ restore_selected_frame (struct frame_id a_frame_id, int frame_level)
|
|||
struct frame_info *frame = NULL;
|
||||
int count;
|
||||
|
||||
/* This means there was no selected frame. */
|
||||
if (frame_level == -1)
|
||||
{
|
||||
select_frame (NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
gdb_assert (frame_level >= 0);
|
||||
|
||||
/* Restore by level first, check if the frame id is the same as
|
||||
|
@ -1137,7 +1144,14 @@ make_cleanup_restore_current_thread (void)
|
|||
&& target_has_registers
|
||||
&& target_has_stack
|
||||
&& target_has_memory)
|
||||
frame = get_selected_frame (NULL);
|
||||
{
|
||||
/* When processing internal events, there might not be a
|
||||
selected frame. If we naively call get_selected_frame
|
||||
here, then we can end up reading debuginfo for the
|
||||
current frame, but we don't generally need the debuginfo
|
||||
at this point. */
|
||||
frame = get_selected_frame_if_set ();
|
||||
}
|
||||
else
|
||||
frame = NULL;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue