Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Vladimir Prus <ghost@cs.msu.su>
Cc: gdb-patches@sources.redhat.com
Subject: Re: MI: type prefixes for values
Date: Fri, 05 May 2006 19:25:00 -0000	[thread overview]
Message-ID: <20060505192535.GM31029@nevyn.them.org> (raw)
In-Reply-To: <e2scu2$vvn$1@sea.gmane.org>

On Fri, Apr 28, 2006 at 10:32:34AM +0400, Vladimir Prus wrote:
> 
> Any comments on the patch I've send two weeks ago? Note that I'm not longer
> interested in this patch myself, since I no longer use "--stack-list-frames
> --all-values" in KDevelop, but I believe the patch affects the MI support
> in Emacs that Nick is working on.

After thinking about it for a bit, let's not do it this way.  I think
we could put a catch at the right place and make all possible memory
errors come out consistently - I'm thinking something like

  volatile struct gdb_exception except;
  int ret = 0;

  ...

  TRY_CATCH (except, RETURN_MASK_ERROR)
    {
      ret = val_print (...);
    }
  if (except.reason < 0)
    fprintf_filtered (stream, _("<error reading variable>"));

  return ret;

This would probably either require additional changes, to use
common_val_print and value_field et cetera in more places, or
else have to be placed in val_print directly, around the call to
LA_VAL_PRINT.  The latter is easier.

Here's a patch; before it I get:

(gdb) i locals 
ref = (int &) @0x2ae2e8dc0392: 1287883081
ref3 = (int &) @0x2ae2e90bc7a0: -385103520
ref5 = (int &) @0x0: Cannot access memory at address 0x0

After:

(gdb) i locals 
ref = (int &) @0x2ac1ec165392: 1287883081
ref3 = (int &) @0x2ac1ec4617a0: -330950304
ref5 = (int &) @0x0: <error reading variable>
ref7 = (int &) @0x40041b: 147096392
ref9 = (int &) @0x400588: 352685384
ref2 = (int &) @0x2ac1ec4630c0: -330969896
ref4 = (int &) @0x2ac1ec460fe0: -330952736
ref6 = (int &) @0x2ac1ec270ca0: 0
ref8 = (int &) @0x4005f0: 610568524

Similarly:

(gdb) interpreter-exec mi "-stack-list-locals 1"
^done,locals=[{name="ref",value="(int &) @0x2ba30c30d392:
1287883081"},{name="ref3",value="(int &) @0x2ba30c6097a0:
207657312"},{name="ref5",value="(int &) @0x0: <error reading
variable>"},{name="ref7",value="(int &) @0x40041b:
147096392"},{name="ref9",value="(int &) @0x400588:
352685384"},{name="ref2",value="(int &) @0x2ba30c60b0c0:
207637720"},{name="ref4",value="(int &) @0x2ba30c608fe0:
207654880"},{name="ref6",value="(int &) @0x2ba30c418ca0:
0"},{name="ref8",value="(int &) @0x4005f0: 610568524"}]

We already print out various <angle brackets> messages for error
conditions; I think adding a new one is fine.  How about you?

This patch doesn't touch the issue of type prefixes, leaving that to
deal with separately.


-- 
Daniel Jacobowitz
CodeSourcery

2006-05-05  Daniel Jacobowitz  <dan@codesourcery.com>

	* valprint.c: Include "exceptions.h".
	(val_print): If something goes wrong while printing, supply an
	error message.

Index: valprint.c
===================================================================
RCS file: /cvs/src/src/gdb/valprint.c,v
retrieving revision 1.59
diff -u -p -r1.59 valprint.c
--- valprint.c	18 Jan 2006 21:24:19 -0000	1.59
+++ valprint.c	5 May 2006 19:23:53 -0000
@@ -34,6 +34,7 @@
 #include "valprint.h"
 #include "floatformat.h"
 #include "doublest.h"
+#include "exceptions.h"
 
 #include <errno.h>
 
@@ -205,6 +206,9 @@ val_print (struct type *type, const gdb_
 	   CORE_ADDR address, struct ui_file *stream, int format,
 	   int deref_ref, int recurse, enum val_prettyprint pretty)
 {
+  volatile struct gdb_exception except;
+  int ret = 0;
+
   struct type *real_type = check_typedef (type);
   if (pretty == Val_pretty_default)
     {
@@ -224,8 +228,15 @@ val_print (struct type *type, const gdb_
       return (0);
     }
 
-  return (LA_VAL_PRINT (type, valaddr, embedded_offset, address,
-			stream, format, deref_ref, recurse, pretty));
+  TRY_CATCH (except, RETURN_MASK_ERROR)
+    {
+      ret = LA_VAL_PRINT (type, valaddr, embedded_offset, address,
+			  stream, format, deref_ref, recurse, pretty);
+    }
+  if (except.reason < 0)
+    fprintf_filtered (stream, _("<error reading variable>"));
+
+  return ret;
 }
 
 /* Check whether the value VAL is printable.  Return 1 if it is;
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.811
diff -u -p -r1.811 Makefile.in
--- Makefile.in	23 Apr 2006 14:15:01 -0000	1.811
+++ Makefile.in	5 May 2006 19:24:26 -0000
@@ -2773,7 +2773,8 @@ valops.o: valops.c $(defs_h) $(symtab_h)
 	$(cp_support_h) $(observer_h)
 valprint.o: valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
 	$(value_h) $(gdbcore_h) $(gdbcmd_h) $(target_h) $(language_h) \
-	$(annotate_h) $(valprint_h) $(floatformat_h) $(doublest_h)
+	$(annotate_h) $(valprint_h) $(floatformat_h) $(doublest_h) \
+	$(exceptions_h)
 value.o: value.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
 	$(value_h) $(gdbcore_h) $(command_h) $(gdbcmd_h) $(target_h) \
 	$(language_h) $(scm_lang_h) $(demangle_h) $(doublest_h) \


  reply	other threads:[~2006-05-05 19:25 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <dt43qh$sns$1@sea.gmane.org>
2006-03-13  2:44 ` Nick Roberts
2006-03-17 19:32   ` Vladimir Prus
2006-03-17 19:41     ` Daniel Jacobowitz
2006-03-21 14:58       ` Vladimir Prus
2006-03-24  4:30         ` Daniel Jacobowitz
2006-03-24  9:46           ` Vladimir Prus
2006-03-24 21:02             ` Daniel Jacobowitz
2006-04-06  8:42               ` Vladimir Prus
2006-04-28  6:32                 ` Vladimir Prus
2006-05-05 19:25                   ` Daniel Jacobowitz [this message]
2006-05-06  9:59                     ` Nick Roberts
2006-05-15 16:57                       ` Daniel Jacobowitz
2006-05-16  6:10                         ` Nick Roberts
2007-02-03  5:31                         ` MI: type prefixes for values [PATCH] Nick Roberts
2007-02-04 14:16                           ` Daniel Jacobowitz
2007-02-04 21:46                             ` Nick Roberts
2006-03-17 22:25   ` MI: type prefixes for values Daniel Jacobowitz
2006-03-18 18:39     ` Nick Roberts
2006-03-20  6:50       ` Daniel Jacobowitz
2006-03-21 10:22         ` Nick Roberts
2006-03-24  4:25           ` Daniel Jacobowitz
2006-03-24  5:26             ` Nick Roberts

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=20060505192535.GM31029@nevyn.them.org \
    --to=drow@false.org \
    --cc=gdb-patches@sources.redhat.com \
    --cc=ghost@cs.msu.su \
    /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