Fix deletion of FinishBreakpoints

Currently, FinishBreakpoints are set at the return address of a frame based on
the `finish' command, and are meant to be temporary breakpoints. However, they
are not being cleaned up after use, as reported in PR python/18655. This was
happening because the disposition of the breakpoint was not being set
correctly.

This commit fixes this issue by correctly setting the disposition in the
post-stop hook of the breakpoint. It also adds a test to ensure this feature
isn't regressed in the future.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18655
This commit is contained in:
Johnson Sun
2022-10-21 01:49:18 +08:00
committed by Simon Marchi
parent 9c48a8e6f4
commit 6533cbeeb8
4 changed files with 105 additions and 1 deletions

View File

@ -145,7 +145,7 @@ bpfinishpy_post_stop_hook (struct gdbpy_breakpoint_object *bp_obj)
{
/* Can't delete it here, but it will be removed at the next stop. */
disable_breakpoint (bp_obj->bp);
gdb_assert (bp_obj->bp->disposition == disp_del);
bp_obj->bp->disposition = disp_del_at_next_stop;
}
catch (const gdb_exception &except)
{