From murdoch at stats.uwo.ca  Wed Jun 29 20:30:12 2005
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Wed, 29 Jun 2005 14:30:12 -0400
Subject: [Rd] Viewing R objects in gdb
In-Reply-To: <Pine.LNX.4.63.0506291302130.4273@nokomis.stat.uiowa.edu>
References: <42C2DF42.8090200@stats.uwo.ca>
	<Pine.LNX.4.63.0506291302130.4273@nokomis.stat.uiowa.edu>
Message-ID: <42C2E8B4.4010007@stats.uwo.ca>

On 6/29/2005 2:06 PM, Luke Tierney wrote:
> On Wed, 29 Jun 2005, Duncan Murdoch wrote:
> 
>> I'm trying to track down a bug in some experimental code, where an
>> object's attribute is getting messed up.  This means I'd like to examine
>> R objects while within gdb.
>>
>> One of the things I'd like to do is to examine the names of all the
>> attributes.  This is exactly what an example in the R Extensions manual
>> section 4.11.2 "Inspecting R objects when debugging" does, but the code
>> there doesn't work, presumably because the R internals have changed
>> since it was written.
>>
>> Specifically, I get
>>
>> (gdb) p $a->u.listsxp.tagval->u.symsxp.pname->u.vecsxp.type.c
>> Error: There is no member named vecsxp.
>>
> 
> Something like this I think (untested):
> 
>          p ((VECSEXP)$a->u.listsxp.tagval->u.symsxp.pname)->vecsxp.type.c

That gets the typecast right, but now I have the problem that currently 
vecsxp doesn't have a type member:

(gdb) p ((VECSEXP)$a->u.listsxp.tagval->u.symsxp.pname)->vecsxp.type.c
Error: There is no member named type.

(gdb) p ((VECSEXP)$a->u.listsxp.tagval->u.symsxp.pname)->vecsxp
$1 = {length = 5, truelength = 6957219}

I guess I need to write a function that uses the macros to extract the 
data (since gdb doesn't see the macros).  Or do we already have one?

Duncan Murdoch



[Rd] Viewing R objects in gdb
Duncan Murdoch