[Rcpp-devel] R.e. Debugging Rcpp packages with GDB

Christian Gunning xian at unm.edu
Thu Jan 20 06:19:56 CET 2011


Thanks all for the crash course - it works great!

I just cobbled up a simple "reload" function. This has been a
long-standing pet peeve of mine -- anything that makes me leave the R
shell is distracting.  I've tested it and it seems to work just fine.
Are there any non-obvious downsides here?

reload = function(pkgname, preload=TRUE) {
    ## load it
    if (preload) {
        library(pkgname, character.only = TRUE)
    }
    libs <- dir(paste(.path.package(pkgname), '/libs', sep=''), full.names=TRUE)
    for (lib in libs) {
        dyn.unload(lib)
        dyn.load(lib)
    }
    return()
}

best,
Christian

On Wed, Jan 19, 2011 at 8:01 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> On 19 January 2011 at 08:43, Douglas Bates wrote:
> | > | 2) Is there a simple way to include debugging symbols/keep values from
> | > | getting optimized out when building with Rcpp?
> | >
> | > You could always include -g and then strip what you don't need -- which is
> | > what Debian and Ubuntu do to give you the *-dbg packages.
> | >
> | > R sits on top of Makefile logic, and make is pretty powerful language.  You
> | > can (literally) do just about anything....   Setting CFGLAGS / CXXFLAGS or
> | > their PKG_* variants is probably easiest.
> |
> | Or create a file $HOME/.R/Makevars and define CXXFLAGS and CFLAGS in
> | there.  I have the following contents
> |
> | CFLAGS= -g -pipe -std=gnu99 -Wall -pedantic
> | CFLAGS= -g -O3 -pipe -std=gnu99 -Wall -pedantic
> | CXXFLAGS= -g -pipe -Wall -pedantic
> | CXXFLAGS= -g -pipe -std=c++0x -Wall -pedantic
> | CXXFLAGS= -g -O3 -pipe -Wall -pedantic
> | CXXFLAGS= -g -O3 -pipe -std=c++0x -Wall -pedantic
> |
> | and comment out the trailing lines if I want to suppress the c++0x
> | standard or the optimization when using the debugger.
>
> Seconded.
>
> That is actually what I do, including the better-than-awesome ccache:
>
> edd at max:~$ cat .R/Makevars
> # edd 03 Mar 2009
>
> ## for C code
> CFLAGS=-g -O3 -Wall -pipe -pedantic -std=gnu99
> #CFLAGS=-O3 -g0 -Wall -pipe -std=gnu99
> ## for C++ code
> CXXFLAGS= -g -O3 -Wall -pipe -pedantic -Wno-variadic-macros
> #CXXFLAGS= -g0 -O3 -Wall -pipe -Wno-variadic-macros
> #CXXFLAGS= -O3 -g0 -Wall -pipe
> ## for Fortran code
> #FFLAGS=-g -O3 -Wall -pipe
> FFLAGS=-O3 -g0 -Wall -pipe
> ## for Fortran 95 code
> #FCFLAGS=-g -O3 -Wall -pipe
> FCFLAGS=-O3 -g0 -Wall -pipe
>
> CC=ccache gcc
> CXX=ccache g++
> FC=ccache gfortran
> F77=ccache gfortran
> MAKE=make -j4
> edd at max:~$
>
>
> The -Wno-variadic-macros was once needed when Romain was a tad more
> aggressive in trying new C++0x features.
>
> The 'make -j4' also takes care of parallel builds.
>
> Dirk
>
> --
> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
>



-- 
A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama!


More information about the Rcpp-devel mailing list