Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Tom Tromey <tromey@redhat.com>
To: Steffen Dettmer <steffen.dettmer@googlemail.com>
Cc: gdb@sourceware.org
Subject: Re: gdb "automation" question
Date: Tue, 22 Jun 2010 16:09:00 -0000	[thread overview]
Message-ID: <m3zkyndp7f.fsf@fleche.redhat.com> (raw)
In-Reply-To: <AANLkTikDND8rrnJka2vmTCk3avzOPDJhZEdUIEHkkK70@mail.gmail.com>	(Steffen Dettmer's message of "Tue, 22 Jun 2010 16:50:53 +0200")

>>>>> "Steffen" == Steffen Dettmer <steffen.dettmer@googlemail.com> writes:

Steffen> I've got questions regarding gdb "automation" which I want to use
Steffen> to pass "log file" information from a remote target.

What version of gdb are you using?

Steffen> Best would be to show this right after a message was added. So in
Steffen> the log handler I added a call to an empty static function
Steffen> logHook() and tried:
Steffen> define ena_log
Steffen>   b logHook
Steffen>   commands
Steffen>     silent
Steffen>     show_log
Steffen>     continue
Steffen>   end
Steffen> end

Steffen> This has the big disadvantage that it breaks stepping (commands
Steffen> "next" and so on)

Yeah, we've recently been discussing this use case (as a tangent from
the main discussion) on the patch list.

Unless I really misread it, I think there is some agreement that we
should have a new flag on a breakpoint that would tell the gdb internals
"after the commands are done, continue stepping".

This would solve this problem plus a few other similar things.


I did find a trick you can use to accomplish this with a python-enabled
gdb.  What you do is write a new convenience function in Python.  Do all
the work in this function, then have the function always return 0.
Finally, make your breakpoint condition call this function.

This is ugly, but it does seem to work.

Steffen> Another problem is that to reconnect all breakpoints
Steffen> must be disabled ("dis") but afterwards cannot be enabled ("ena"
Steffen> would enable all breakpoints, including the breakpoints disabled
Steffen> before the "dis" - of course!). The numbers of the break points
Steffen> of course change, so the script cannot do something like "ena 12"
Steffen> or "enable breakpoint m/logHook/" or so.

With a recent enough GDB you can write a Python script to do the
enabling, which will give you more control over what happens.

Steffen> define hook-stop
Steffen>   show_log
Steffen> end

Steffen> Unfortunately directly after rebooting (before "target remote"
Steffen> and "continue"), the hook cannot work. I have to CTRL-C all the
Steffen> time to cancel hook execution.

I guess you could make a flag and a new phony "target":

set var $flag = 0

define target ours
  target remote etc
  set var $flag = 1
end

define hook-stop
  if $flag
    show_log
  endif
end

Then have users use "target ours" instead of "target remote".

Steffen> define defaction
Steffen>   .... other default actions ...
Steffen>   define hook-stop
Steffen>      show_log
Steffen>   end
Steffen> end
Steffen> but I get an error ("This command cannot be used at top level").

At least in the current sources this error only comes from the
tracepoint code.  I don't have a tree before 7.0 handy, so if you're
using something older, maybe upgrading would help this.  Or maybe the
"..." includes tracepoint commands?

Steffen> Best would be a kind of "at this position perform an action and
Steffen> continue" that would not interference with user breakpoints and
Steffen> stepping with "next".

A patch would be great :-).  But you could also CC yourself on the bug:
http://sourceware.org/bugzilla/show_bug.cgi?id=11669

FWIW, giving Python better access to "inferior control" (stuff like
noticing when the inferior stops, starts, is killed, etc) is also on our
wish list.  There were some initial patches from last year's Summer of
Code, but we haven't integrated those yet, and in any case I don't think
they went quite far enough.

Tom


  reply	other threads:[~2010-06-22 16:09 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-22 14:51 Steffen Dettmer
2010-06-22 16:09 ` Tom Tromey [this message]
2010-06-23 17:12   ` Steffen Dettmer
2010-06-23 20:59     ` Tom Tromey
2010-06-23 18:21   ` Steffen Dettmer
2010-06-23 21:01     ` Tom Tromey
2010-06-24 10:33       ` Steffen Dettmer
2010-06-24 18:19         ` Tom Tromey
2010-06-28 15:11 ` Steffen Dettmer
2010-06-28 15:21   ` Pedro Alves
2010-06-28 20:25   ` Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3zkyndp7f.fsf@fleche.redhat.com \
    --to=tromey@redhat.com \
    --cc=gdb@sourceware.org \
    --cc=steffen.dettmer@googlemail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox