Re: GDB Python API: stop/continue after breakpoint

Phil Muldoon
2011-04-20T15:15:28Z

Kevin Pouget <kevin.pouget@gmail.com> writes:

> Hello,
>
> I'm coming back to this post because I've got a bit of an issue here:
>
> basically, I need (and I'm looking for to helping for it!) a sharp
> control of the inferior execution from the python interface, but I'm
> facing some limitations:
>
> * in MyBreakpoint.stop(), I can say continue/stop the inferior, but I
> can't run "finish" (or "next" or what ever, I guess), because the
> inferior is still considered as running:
>> "gdb.error: Cannot execute this command while the selected thread is running."

At this point GDB is deciding whether to stop the inferior and
return control to the console or not. (Really, at this point, the
inferior is stopped, by ptrace, but GDB is trying to work out if it
should really maintain the stop, or resume the inferior). So in GDB's
internal data store, the inferior (thread) is still "running" and will
be so until a firm stop decision is reached. Because of this
intermediate state, you cannot issue cannot step/next/continue/finish or
other inferior control commands. This is really a very simplistic view
of what is going on. I've glossed over a lot.

> * in event.stop.connect() that's possible, but I can't
> `gdb.execute("continue")' the execution because I would miss any
> "non-python" reasons to stop (ie, a user-breakpoint, a signal ...)

The only thing I can think to do here is set some of your own data in
your Python module. Breakpoint.stop sets some flag or data, and the
event.connect can pick up on that. But there are gaps in the API. File
bugs, I look there daily.

I hope this helped some!

Cheers,

Phil