"continue" in breakpoint commands breaks line-by-line stepping

Tom Tromey tom@tromey.com
Thu Mar 16 08:58:00 GMT 2017


>>>>> "Juraj" == Juraj Oršulić <juraj.orsulic@fer.hr> writes:

Juraj> Hi everyone, I have a quick question. I have added some breakpoint
Juraj> commands for logging using the "commands" command. Since I don't want
Juraj> to stop the execution in these points, I added a "continue", as
Juraj> mentioned in https://sourceware.org/gdb/onlinedocs/gdb/Break-Commands.html.
Juraj> However, this breaks stepping line-by-line in outer frames - if I
Juraj> stumple upon one of these logging breakpoints, it issues a "continue",
Juraj> and I lose control if I call "next" when I am in an outer frame. How
Juraj> could I mitigate this? Perhaps by redefining "next" to set a temporary
Juraj> breakpoint on the next line to ensure that I stop there? Should this
Juraj> be the default behavior?

There are a few reasonably good ways to deal with the
"next-over-continue" issue.

One way, specifically for logging, is to use the dprintf command instead
of a breakpoint+commands.  dprintf doesn't have this problem.

Another way, if you need something more generic, is to use Python to
create your breakpoints and do your actions in the |stop| method.  This
was introduced specifically to deal with this problem.

A third way, specific to modifying a variable, is not to do this:

    b x
    commands
      silent
      set y = 73
      cont
    end

but instead:

    b x if y = 73, 1

Breakpoint conditions are evaluated at a different time and don't affect
"next"ing.

I think it would be good if the "Break Commands" documentation was
updated to mention dprintf and the variable setting scenario, and to
point out the next-over-continue problem.

Maybe gdb could introduce some kind of flag to "continue" to breakpoints
to solve this problem more generally.

Tom



More information about the Gdb mailing list