From murdoch at stats.uwo.ca  Sun May 13 14:45:02 2007
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Sun, 13 May 2007 08:45:02 -0400
Subject: [Rd] Strange behavior of debugger
In-Reply-To: <dd6eb99f7435.46462fbc@usc.edu>
References: <dd6eb99f7435.46462fbc@usc.edu>
Message-ID: <4647084E.4040006@stats.uwo.ca>

On 13/05/2007 12:21 AM, Tong Wang wrote:
> Hi, All:
>     I had some trouble debugging C source dynamically loaded into R , when I issued N  in gdb(or insight) , the debugger, instead of moving downward step by step, jumped to strange positions (upward, downward, one step, a few steps away).
> 
>    To enter the debugger, I issued  gdb(insight) Rgui.exe in Cygwin and add this line :  asm("int $3");   to my C code.  After 
> entering R, I did something like:  dyn.load("mypath/mycode.dll") , then  out <- .C("myfun", arg1=as.numeric(a),......) 
> The C files are compiled with:    R CMD SHLIB -d myfile.c
>    
>    I am using Win XP + Cygwin, and I have a binary version and a cygwin compiled version of R-2.4.1 installed. This same 
> behavior show up in both installations.  

I think you're seeing the code rearrangements that happen when gcc 
optimizes the code.  It puts some functions inline, it shares similar 
sequences of instructions between different blocks of code, etc.

If this is causing problems in debugging, change the -O3 to a lower 
level of optimization, e.g. -O0 (i.e. oh zero) in the relevant Makefile: 
  src/gnuwin32/MakeDll if you're debugging your own package, 
src/gnuwin32/Makefile for most of R, etc.  However, be aware that in 
case of nasty bugs, this may change the behaviour of your program.

By the way, if you used Cygwin compilers to build, expect problems.  The 
supported compiler is MinGW.

> One thing is, even though I set the evn  DEBUG as T when built R from sourse in 
> Cygwin,  the Rgui.exe I got doesn't seem to contain debug info.  (although R.exe does) , I am not sure if this means I did something wrong.  

Perhaps you didn't recompile everything with the flag set.  You need it 
set both when the .o object files are created and later when they are 
linked.  And DEBUG=T has no effect on the initial entry point of 
Rgui.exe, because it is coming from the MinGW libraries, not from R 
source, and R doesn't compile those.

Duncan Murdoch



[Rd] Strange behavior of debugger
Duncan Murdoch