Recently I've been experimenting with Rcpp (inline) to generate DLLs that perform various tasks on supplied R inputs. I'd like to be able to debug the code in these DLLs line by line, given a specific set of R inputs. (I'm working under Windows.)
To illustrate, let's consider a specific example that anybody should be able to run...
The code below is a really simple cxxfunction which simply doubles the input vector. Note however that there's an additional variable myvar that changes value a few times but doesn't affect the output - this has been added so that we'll be able to see when the debugging process is running correctly.
library(inline)
library(Rcpp)
f0 <- cxxfunction(signature(a="numeric"), plugin="Rcpp", body='
Rcpp::NumericVector xa(a);
int myvar = 19;
int na = xa.size();
myvar = 27;
Rcpp::NumericVector out1(na);
for(int i=0; i < na; i++) {
out1[i] = 2*xa[i];
myvar++;
}
myvar = 101;
return(Rcpp::List::create( _["out1"] = out1));
')
After we run the above, typing the command
getLoadedDLLs()
brings up a list of DLLs in the R session. The last one listed should be the DLL created by the above process - it has a random temporary name, which in my case is
file7e61645c
The "Filename" column shows that cxxfunction has put this DLL in the location tempdir(), which for me is currently
C:/Users/TimP/AppData/Local/Temp/RtmpXuxtpa/file7e61645c.dll
Now, the obvious way to call the DLL is via f0, as follows
> f0(c(-7,0.7,77))
$out1
[1] -14.0 1.4 154.0
But we can of course also call the DLL directly by name using the .Call command:
> .Call("file7e61645c",c(-7,0.7,77))
$out1
[1] -14.0 1.4 154.0
So I've reached the po