This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
internal-error: insert_step_resume_breakpoint_at_sal
- From: Nick Roberts <nickrob at snap dot net dot nz>
- To: gdb at sources dot redhat dot com
- Date: Sun, 16 Jan 2005 23:47:05 +1300
- Subject: internal-error: insert_step_resume_breakpoint_at_sal
- References: <16804.1142.136766.593493@farnswood.snap.net.nz>
Following my earlier e-mail (Wed, 24 Nov 2004 16:48:06 +1300):
> Debugging emacs in CVS with gdb in CVS, I often get an error if I try to step
> through the program after setting a breakpoint:
>
> To reproduce:
>
> gdb emacs
> GNU gdb 6.3.50_2004-11-24-cvs
> ...
> (gdb) b Fsplit_window (for example)
> (gdb) run
>
> `C-x 2' in Emacs
>
> (gdb) n
> infrun.c:2763: internal-error: insert_step_resume_breakpoint_at_sal: Assertion `step_resume_breakpoint == NULL' failed.
> A problem internal to GDB has been detected,
infrun.c (in insert_step_resume_breakpoint_at_sal) says:
/* There should never be more than one step-resume breakpoint per
thread, so we should never be setting a new
step_resume_breakpoint when one is already active. */
However, in this case (and presumably others too) there is more than one
step-resume breakpoint. insert_step_resume_breakpoint_at_sal is called
at infrun.c:1931 and then infrun.c:1949 through handle_inferior_event:
First time:
#0 insert_step_resume_breakpoint_at_sal (sr_sal=
{symtab = 0x0, section = 0x0, line = 0, pc = 134872212, end = 0}, sr_id=
{stack_addr = 3221220224, code_addr = 134872206, special_addr = 0, stack_addr_p = 1, code_addr_p = 1, special_addr_p = 0}) at infrun.c:2671
During symbol reading, incomplete CFI data; unspecified registers (e.g., eax) at#1 0x080fbe4f in insert_step_resume_breakpoint_at_frame (return_frame=0x0)
at infrun.c:2699
#2 0x080fa6c3 in handle_inferior_event (ecs=0xbffff180) at infrun.c:1931
#3 0x080f9cb8 in wait_for_inferior () at infrun.c:974
Second time:
#0 internal_error (file=0x8221657 "infrun.c", line=2668,
string=0x81ef7a1 "%s: Assertion `%s' failed.") at utils.c:789
#1 0x080fbdda in insert_step_resume_breakpoint_at_sal (sr_sal=
{symtab = 0x0, section = 0x0, line = 0, pc = 134872212, end = 0}, sr_id=
{stack_addr = 3221220224, code_addr = 134872206, special_addr = 0, stack_addr_p = 1, code_addr_p = 1, special_addr_p = 0}) at infrun.c:2672
#2 0x080fbe4f in insert_step_resume_breakpoint_at_frame (return_frame=0x0)
at infrun.c:2699
#3 0x080fa677 in handle_inferior_event (ecs=0xbffff180) at infrun.c:1949
#4 0x080f9cb8 in wait_for_inferior () at infrun.c:974
Previously GDB just issued a warning, but there never seemed to be any
harm in dropping the old step_resume_breakpoint. How about replacing:
gdb_assert (step_resume_breakpoint == NULL);
in insert_step_resume_breakpoint_at_sal with:
warning
("GDB bug: infrun.c (wait_for_inferior): dropping old step_resume breakpoint");
which used to be in check_for_old_step_resume_breakpoint?
Nick