From bill at insightful.com  Tue May  6 17:30:22 2008
From: bill at insightful.com (Bill Dunlap)
Date: Tue, 6 May 2008 08:30:22 -0700 (PDT)
Subject: [Rd] a R_PV problem
In-Reply-To: <48201AE8.2060501@stats.uwo.ca>
References: <bc33365a0805060002w316d0c92mf2598adfd076ef07@mail.gmail.com>
	<48201AE8.2060501@stats.uwo.ca>
Message-ID: <Pine.GSO.4.56.0805060827020.11494@devsun3201.insightful.com>

On Tue, 6 May 2008, Duncan Murdoch wrote:

> On 06/05/2008 3:02 AM, pseudo wrote:
> > Dear all,
> >
> > When using gdb to debug my C code, I use R_PV to show the content of
> > SEXP variables:
> >
> >   SEXP sexp; // it is a data.frame
> >   SEXP colNames = getAttrib(sexp, R_NameSymbol);
> >
> > A strange thing is that after halting the program:
> >
> >   (gdb) p R_PV(colNames)
> >
> > does not show the content of colNames. I am positive my code is right
> > because if I insert "PrintValue(colNames);" in the c code, it will
> > print the right value. My debug result shows that the variable
> > "colNames" failed the "isObject" call. I am not sure whether this is a
> > new feature or bug. Anyone can help?
>
> Are you sure that getAttrib has been called?  Depending on the
> optimization level under which your code was compiled, instructions may
> be re-ordered.  gdb may show the instruction pointer after that line,
> even though that line hasn't been run yet.

R_PV(sexp) only prints if isObject(sexp) is true, i.e., if it
is "internally classed".  Try using Rf_PrintValue(colNames) from
the debugger.

src/main/print.c contains:
   /* Print an S-expression using global options */
   void PrintValue(SEXP s)
   {
       PrintValueEnv(s, R_GlobalEnv);
   }
   /* Ditto, but only for objects, for use in debugging */
   void R_PV(SEXP s)
   {
       if(isObject(s)) PrintValueEnv(s, R_GlobalEnv);
   }
and include/Internals.h has the usual add-Rf_ #define:
   #define PrintValue              Rf_PrintValue

----------------------------------------------------------------------------
Bill Dunlap
Insightful Corporation
bill at insightful dot com
360-428-8146

 "All statements in this message represent the opinions of the author and do
 not necessarily reflect Insightful Corporation policy or position."



[Rd] a R_PV problem
Bill Dunlap