Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Bob Rossi <bob@brasko.net>
To: Eli Zaretskii <eliz@gnu.org>
Cc: GDB <gdb@sources.redhat.com>
Subject: Re: [mi] watchpoint-scope exec async command
Date: Sun, 27 Mar 2005 14:10:00 -0000	[thread overview]
Message-ID: <20050327150922.GB1451@white> (raw)
In-Reply-To: <01c53207$Blat.v2.4$3def9b00@zahav.net.il>

On Sat, Mar 26, 2005 at 03:24:10PM +0200, Eli Zaretskii wrote:
> > Date: Fri, 25 Mar 2005 11:12:39 -0500
> > From: Bob Rossi <bob@brasko.net>
> > 
> > (gdb)
> > -break-watch param
> > ^done,wpt={number="2",exp="param"}
> > (gdb)
> > -exec-continue
> > ^running
> > (gdb)
> > ~"Hardware watchpoint 2 deleted because the program has left the block \n"
> > ~"in which its expression is valid.\n"
> > *stopped,reason="exited",exit-code="02"
> > (gdb)
> > 
> > Is it just a bug that there is no 'watchpoint-scope' returned?
> 
> I think it's a bug, yes: there's one instance in breakpoint.c
> (specifically, in the function insert_bp_location) that uses
> printf_filtered instead of the ui_* functions to produce the warning
> about a watchpoint that went out of scope.  I think it should use the
> same code that is used by watchpoint_check to produce a similar
> warning.

Sorry, long email, please scan quickly.

Unfortunately, this is going to much harder than I originally thought. In
fact, it looks like the whole thing is broken.

I think part of the problem is the fact that the way the MI output is
generated is hackish. I think it's kind of bad that the MI output is
basically concatenated strings from the rest of GDB.  For instance, 
I think it would be much better if there were data structures available, 
and the breakpoint code set up structures with the information that the 
MI needed. Then later on, the MI could traverse the structure and print 
what it wanted to. In that way, all of the information needed could be 
used to print a message at once.

It seems as if the watchpoint-scope has 2 problems that I can find. The
first is that the manual says,
   Setting a watchpoint on a variable local to a function. GDB will stop
   the program execution twice: first for the variable changing value,
   then for the watchpoint going out of scope.

   ...
   -exec-continue
   ^running
   ^done,reason="watchpoint-scope",wpnum="5",
   frame={func="callee3",args=[{name="strarg",
   value="0x11940 \"A string argument.\""}],
   file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
   (gdb)

In the above example, things work fine. However, if you happen to use
-exec-next or -exec-finish, something that by itself produces an
exec-async-output command, then instead of having 2 async output
commands, you get 1, with the data combined. Two example are below, 1
with -exec-continue, and one with -exec-next

   (gdb) 
   -exec-continue
   ^running
   (gdb) 
   ~"Hardware watchpoint 2 deleted because the program has left the block \n"
   ~"in which its expression is valid.\n"
   *stopped,reason="watchpoint-scope",reason="exited",exit-code="02"
   (gdb) 

   (gdb) 
   -exec-next
   ^running
   (gdb) 
   ~"Single stepping until exit from function __libc_start_main, \n"
   ~"which has no line number information.\n"
   ~"Hardware watchpoint 2 deleted because the program has left the block \n"
   ~"in which its expression is valid.\n"
   *stopped,reason="watchpoint-scope",reason="exited-normally"
   (gdb) 

Both of the examples above give 2 reasons for the async command.
So, the MI syntax is correct, but the semantics are completely wrong. I
think it's currently impossible to return 2 async records in 1 MI output
command. This is because in mi-main.c the *stopped is hard coded, as if
there could only be 1 async reason per command. 

There will probably have to be some fundamental changes in order to get
this to work. I think the rest of GDB needs to be able to tell MI
through the uiout that a new async record is ready to be sent, instead
of having the MI hard code it.

Thanks,
Bob Rossi


  parent reply	other threads:[~2005-03-27 14:10 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-25 16:12 Bob Rossi
2005-03-25 16:25 ` gdbserver question james osburn
2005-03-25 16:33   ` Daniel Jacobowitz
2005-03-26 13:27 ` [mi] watchpoint-scope exec async command Eli Zaretskii
2005-03-26 13:44   ` Bob Rossi
2005-03-27 14:10   ` Bob Rossi [this message]
2005-03-28 21:57   ` Bob Rossi
2005-03-28 22:40     ` Daniel Jacobowitz
2005-03-28 22:54       ` Bob Rossi
2005-03-28 22:59         ` Daniel Jacobowitz
2005-03-29  0:43           ` Bob Rossi
2005-03-29  1:35             ` Daniel Jacobowitz
2005-03-29  1:51               ` Bob Rossi
2005-03-29  2:00                 ` Daniel Jacobowitz
2005-03-29 21:33                   ` Eli Zaretskii
2005-03-29 21:39                     ` Mark Kettenis
2005-03-29 21:47                       ` Bob Rossi
2005-03-30  5:15                       ` Eli Zaretskii
2005-03-29 21:43                     ` Daniel Jacobowitz
2005-03-30 20:10                       ` Eli Zaretskii
2005-03-31  0:49                         ` Bob Rossi
2005-03-31  4:43                           ` Eli Zaretskii
2005-03-31 19:59                             ` Bob Rossi
2005-04-01  8:10                               ` Eli Zaretskii
2005-04-01 14:09                                 ` Daniel Jacobowitz
2005-04-02  9:54                                   ` Eli Zaretskii
2005-04-06  2:13                                     ` Bob Rossi
2005-04-06  3:51                                       ` Eli Zaretskii
2005-03-31  2:32                         ` Daniel Jacobowitz
2005-03-31  4:48                           ` Eli Zaretskii
2005-03-31  6:00                             ` Daniel Jacobowitz
2005-03-31 19:49                               ` Eli Zaretskii
2005-03-29 23:29                     ` Bob Rossi
2005-03-30  5:12                       ` Eli Zaretskii
2005-03-30  0:29                     ` Bob Rossi

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=20050327150922.GB1451@white \
    --to=bob@brasko.net \
    --cc=eliz@gnu.org \
    --cc=gdb@sources.redhat.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