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@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@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@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>

        [[alternative HTML version deleted]]

_______________________________________________
R-SIG-Mac mailing list
R-SIG-Mac@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to