From murdoch at stats.uwo.ca  Mon Feb  9 11:23:52 2009
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Mon, 09 Feb 2009 05:23:52 -0500
Subject: [Rd] Strange behavior of C compiled program
In-Reply-To: <498FF1E0.2020103@u-paris10.fr>
References: <498F5EA4.3060307@u-paris10.fr> <498F6052.6070506@stats.uwo.ca>
	<498FF1E0.2020103@u-paris10.fr>
Message-ID: <49900438.7090405@stats.uwo.ca>

On 09/02/2009 4:05 AM, Christophe Genolini wrote:
> Thanks, that was a stupid mistake (I did not know that this is so 
> important).
> 
> So I still have a problem realy more complex and I do not know was is 
> wrong. I am running a .C procedure in a R loop.
> After 4, 5 or sometimes 6 call to the C procedure, Rgui crash (it closes 
> asking me if I want to send a report to Microsoft).
> Is there a debuger that can run the C code with some R in it ? And what 
> kind of mistake can provoque such a crash ?

Debugging C code in R on Windows is a little painful.  valgrind doesn't 
run on Windows (as far as I know), and none of the commercial debuggers 
support the debug format that gcc uses.  However, you can run gdb, and 
it mostly works.  See my page

http://www.stats.uwo.ca/faculty/murdoch/software/debuggingR/

for details.  (I use the Cygwin version of gdb, but it usually gets the 
backtrace wrong if you look for a stack dump.  I understand the MinGW 
version is better at that, but I've been unable to get the Insight 
graphical front end to work with it.  I'd love to hear from someone who 
has a modern graphical front end working for debugging MinGW code on 
Windows.)

Duncan Murdoch

> 
> Thanks
> Christophe
> 
> 
> So I thaught that I find t
>> On 08/02/2009 5:37 PM, Christophe Genolini wrote:
>>> Hi the list,
>>>
>>> I need to include some C code in R, but the behavior of the C code is 
>>> strange : Here is my code :
>>> --- 8< ---
>>>     Rprintf("\n XXXX mTraj=%f 
>>> mClus=%f",mTraj[i+nbId*c],mClustersCenter[j+nbClusters*c]);
>>>
>>>     Rprintf("\nDistA=%d Tmp=%d",dist,tmp);
>>>             tmp = mTraj[i+nbId* c] - mClustersCenter [j+nbClusters* c];
>>>
>>>     Rprintf("\nDistB=%d Tmp=%d",dist,tmp);
>>>             dist += (tmp * tmp);
>>>
>>>     Rprintf("\nDistC=%d Tmp=%d",dist,tmp);
>>> --- 8< ----
>>>
>>> Herer are the stranges results it gives :
>>>
>>> XXXX mTraj=1.000000 mClus=3.000000
>>> DistA=0 Tmp=0
>>> DistB=0 Tmp=0
>>> DistC=0 Tmp=1074790400
>>>
>>> I ask on a C chat, but no one can answer me.
>>> Any idea of what wrong ?
>> You likely have the wrong types for the variables you're printing.  In 
>> C, the format has to match the type of the variable; if you use the 
>> wrong one, you get garbage.
>>
>> Duncan Murdoch
>>



[Rd] Strange behavior of C compiled program
Duncan Murdoch