Skip to content

Strange behavior of debugger

2 messages · Tong Wang, Duncan Murdoch

#
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.  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.  

   Appreciate any help.

tong
#
On 13/05/2007 12:21 AM, Tong Wang wrote:
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.
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