[R-SIG-Mac] Debug Rcpp with lldb: variables not available

Constantin Ahlmann-Eltze @rtjom31415 @end|ng |rom goog|em@||@com
Fri Jun 12 17:12:14 CEST 2020


Hi inf0phile,

you can just run the command generated by devtools (including the step that
generates the package.so file) manually on the command line in the src
folder. Just remember to replace -g O2 with -g O0, then you get the
unoptimized shared object that shouldn't make any problems in debugger.

Best Regards,
Constantin

Am Fr., 12. Juni 2020 um 14:57 Uhr schrieb inf0phile via R-SIG-Mac <
r-sig-mac using r-project.org>:

> * I made a minimal example in order to be reproduced:
>
> library(Rcpp)
> library(RcppArmadillo)
> RcppArmadillo.package.skeleton()
>
> which create the package anRpackage.
> Setting the working directory in this package, I load it by:
>
> library(devtools)
> devtools::load_all()
>
> * Then the basic function rcpparma_hello_world() can be executed:
>
> rcpparma_hello_world()
>
>      [,1] [,2] [,3]
> [1,]    7    0    0
> [2,]    0    7    0
> [3,]    0    0    7
>
> * I want now to debug the code with lldb via the Terminal command R -d
> lldb in order to check the variable values during the execution via the
> command frame variable.
>
> R -d lldb
> (lldb) breakpoint set --name rcpparma_hello_world()
> (lldb) run
> > library(devtools)
> > devtools::load_all()
> > rcpparma_hello_world()
>
> anRpackage.so was compiled with optimization - stepping may behave oddly;
> variables may not be available.
>
> Indeed, the problem is that most of variables are not available:
>
> > next
> > frame variable
>
> (arma::mat) m1 = <no location, value may have been optimized out>
> (arma::mat) m2 = <no location, value may have been optimized out>
>
> * I read in the previous link the following recommandations:
>
>     you may consider producing so-called ‘debug’ builds, with optimization
> toned down, when attempting to debug these kinds of issues as well. For
> building R packages, this effectively amounts to something like CXXFLAGS=-g
> -O0 in your ~/.R/Makevars file)
>
> * I have tried it but it seems to have no effect under the compilation
> flags used since I have a local file Makevars in my package to specify the
> way of compiling with RcppArdimillo, whose flags are:
>
> CXX_STD = CXX11
> PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
> PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
>
> * Then, the command devtools::load_all() produces the line-command
> compilation given below, in which there is indeed -g -O2 making some code
> optimization:
>
> clang++ -mmacosx-version-min=10.13 -std=gnu++11
> -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG
> -I'/Library/Frameworks/R.framework/Versions/4.0/Resources/library/Rcpp/include'
> -I'/Library/Frameworks/R.framework/Versions/4.0/Resources/library/RcppArmadillo/include'
> -I/usr/local/include    -fPIC  -Wall -g -O2  -c rcpparma_hello_world.cpp -o
> rcpparma_hello_world.o
>
> Question: how can I have access to the variables in debugging mode?
>
> Thanks
>
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> Le jeudi 11 juin 2020 18:48, inf0phile via R-SIG-Mac <
> r-sig-mac using r-project.org> a écrit :
>
> > Hello,
> >
> > I'm making a package with Rcpp (and RcppArmadillo) under the latest
> version of Rstudio (1.3.959) and R (4.0.0).
> >
> > -   The compilation of the cpp files (with clang) is working well
> >
> >     clang++ -mmacosx-version-min=10.13 -std=gnu++11
> -I"/Library/Frameworks/
> >     R.framework/Resources/include
> >     " -DNDEBUG -I'/Library/Frameworks/
> >     R.framework/Versions/4.0/Resources/library/Rcpp/include
> >     ' -I'/Library/Frameworks/
> >     R.framework/Versions/4.0/Resources/library/RcppArmadillo/include
> >     ' -I/usr/local/include -fPIC -Wall -g -O2 -c compensator_Rcpp.cpp -o
> compensator_Rcpp.o
> >
> >     This command is automatically generated by pushing the Rstudio
> package dev button "Install and restart"
> >
> > -   I want now to debug the code with lldb (
> https://kevinushey.github.io/blog/2015/04/13/debugging-with-lldb/) via
> the Terminal command R -d lldb in order to check the variable values during
> the execution via the command frame variable. The problem is most of them
> are not available:
> >
> >     (SEXP) lambda = <variable not available>
> >
> >
> > (Rcpp::NumericVector) beta = <no location, value may have been optimized
> out>
> > (int) index = <variable not available>
> >
> > -   I read in the previous link the following recommandations:
> >
> > > you may consider producing so-called ‘debug’ builds, with optimization
> toned down, when attempting to debug these kinds of issues as well. For
> building R packages, this effectively amounts to something like CXXFLAGS=-g
> -O0 in your ~/.R/Makevars file)
> >
> > -   I have tried it but it seems to have no effect under the compilation
> flags used since I have a local file Makevars in my package to specify the
> way of compiling with RcppArdimillo (
> http://dirk.eddelbuettel.com/blog/2017/06/04/), whose flags are:
> >
> >     CXX_STD = CXX11
> >     PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
> >     PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS)
> $(FLIBS)
> >
> >     producing the line-command compilation given above, in which there
> is indeed -g -O2 making some code optimization.
> >
> >     Question: how can I have access to the variables in debugging mode?
> >
> >     Thanks
> >     [[alternative HTML version deleted]]
> >
> >
> > R-SIG-Mac mailing list
> > R-SIG-Mac using r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>

	[[alternative HTML version deleted]]



More information about the R-SIG-Mac mailing list