[Rcpp-devel] R Session Sometimes Aborts

Bill Dunlap williamwdunlap at gmail.com
Mon Dec 13 20:37:22 CET 2021


Thanks, I hadn't noticed the --use-valgrind option to check.

I often run R under valgrind with the command line:
  $ R --quiet --no-save --debugger=valgrind
--debugger-args="--track-origins=yes --vgdb=full --vgdb-error=0"
then in another window start a debugger process with
  $ gdb RHOME/bin/exec/R
  ...
   (gdb) target remote | vgdb
   (gdb) cont
You may need to supply a complete path to vgdb, valgrind's interface to gdb.
Then gdb will set breakpoints where valgrind reports memory misuse and you
can inspect variables, etc., where an error occurs.
You can check for memory leaks from gdb with
   (gdb) monitor leak_check full

-Bill


On Mon, Dec 13, 2021 at 10:29 AM Dirk Eddelbuettel <edd at debian.org> wrote:

>
> On 13 December 2021 at 09:15, Bill Dunlap wrote:
> | I ran your example under valgrind on Linux (Ubuntu 20.04)
>
> Excellent call, as usual!  Thanks for doing that.
>
> R actually makes is so easy to run with valgrind by calling
>
>    R CMD check --use-valgrind somePkg_1.2-3.tar.gz
>
> that I started to add it to some CI setups.
>
> Dirk
>
> | and valgrind found some memory misuse:
> |
> | $ R --quiet --no-save --debugger=valgrind
> | --debugger-args="--track-origins=yes"
> | ==1533== Memcheck, a memory error detector
> | ==1533== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
> | ==1533== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright
> info
> | ==1533== Command: /home/bill/R-devel/R-build/bin/exec/R --quiet --no-save
> | ==1533==
> | > library(terra)
> | terra version 1.5.2
> | > library(raster)
> | Loading required package: sp
> | > library(GLCMTextures)
> | >
> | > r1a<- raster::raster(volcano)
> | > r2a<- glcm_textures(r1a, w=c(3,7), n_levels = 16, quantization = "equal
> | prob", shift=c(0,1))
> | >
> | > r1b<- terra::rast(volcano)
> | > r2b<- glcm_textures2(r1b, w=c(3,7), n_levels = 16, quantization =
> "equal
> | prob", shift=c(0,1)) #Often leads to Rsession Aborted
> | ==1533== Invalid read of size 4
> | ==1533==    at 0x1C1ADA01: C_make_glcm(Rcpp::Matrix<13,
> | Rcpp::PreserveStorage>, int, Rcpp::Vector<13, Rcpp::PreserveStorage>,
> | Rcpp::String) (glcm_cpp_functions.cpp:73)
> | ==1533==    by 0x1C1B2237: C_glcm_textures_helper2(Rcpp::Vector<13,
> | Rcpp::PreserveStorage>, Rcpp::Vector<13, Rcpp::PreserveStorage>, int,
> | Rcpp::Vector<13, Rcpp::PreserveStorage>, Rcpp::String, unsigned long,
> | unsigned long) (glcm_cpp_functions.cpp:218)
> | ==1533==    by 0x1C1A098D: _GLCMTextures_C_glcm_textures_helper2
> | (RcppExports.cpp:94)
> | ==1533==    by 0x1F6B01: R_doDotCall (dotcode.c:622)
> | ==1533==    by 0x2637C9: bcEval (eval.c:7695)
> | ==1533==    by 0x240653: Rf_eval (eval.c:748)
> | ==1533==    by 0x243223: R_execClosure (eval.c:1918)
> | ==1533==    by 0x242EFD: Rf_applyClosure (eval.c:1844)
> | ==1533==    by 0x240E06: Rf_eval (eval.c:871)
> | ==1533==    by 0x246CD6: do_set (eval.c:2990)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x2457DA: do_begin (eval.c:2538)
> | ==1533==  Address 0xa59c0c4 is 28 bytes before a block of size 64 in
> arena
> | "client"
> | ==1533==
> | ==1533== Invalid write of size 4
> | ==1533==    at 0x1C1ADA44: C_make_glcm(Rcpp::Matrix<13,
> | Rcpp::PreserveStorage>, int, Rcpp::Vector<13, Rcpp::PreserveStorage>,
> | Rcpp::String) (glcm_cpp_functions.cpp:73)
> | ==1533==    by 0x1C1B2237: C_glcm_textures_helper2(Rcpp::Vector<13,
> | Rcpp::PreserveStorage>, Rcpp::Vector<13, Rcpp::PreserveStorage>, int,
> | Rcpp::Vector<13, Rcpp::PreserveStorage>, Rcpp::String, unsigned long,
> | unsigned long) (glcm_cpp_functions.cpp:218)
> | ==1533==    by 0x1C1A098D: _GLCMTextures_C_glcm_textures_helper2
> | (RcppExports.cpp:94)
> | ==1533==    by 0x1F6B01: R_doDotCall (dotcode.c:622)
> | ==1533==    by 0x2637C9: bcEval (eval.c:7695)
> | ==1533==    by 0x240653: Rf_eval (eval.c:748)
> | ==1533==    by 0x243223: R_execClosure (eval.c:1918)
> | ==1533==    by 0x242EFD: Rf_applyClosure (eval.c:1844)
> | ==1533==    by 0x240E06: Rf_eval (eval.c:871)
> | ==1533==    by 0x246CD6: do_set (eval.c:2990)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x2457DA: do_begin (eval.c:2538)
> | ==1533==  Address 0xa59c0c4 is 28 bytes before a block of size 64 in
> arena
> | "client"
> | ==1533==
> | --1533-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11
> (SIGSEGV) -
> | exiting
> | --1533-- si_code=1;  Faulting address: 0x10A59C138;  sp: 0x10090e2e20
> |
> | valgrind: the 'impossible' happened:
> |    Killed by fatal signal
> |
> | host stacktrace:
> | ==1533==    at 0x580505C4: ??? (in
> | /usr/lib/x86_64-linux-gnu/valgrind/memcheck-amd64-linux)
> | ==1533==    by 0x58004EBB: ??? (in
> | /usr/lib/x86_64-linux-gnu/valgrind/memcheck-amd64-linux)
> | ==1533==    by 0x58005DA7: ??? (in
> | /usr/lib/x86_64-linux-gnu/valgrind/memcheck-amd64-linux)
> | ==1533==    by 0x580A7204: ??? (in
> | /usr/lib/x86_64-linux-gnu/valgrind/memcheck-amd64-linux)
> | ==1533==    by 0x580F5FD4: ??? (in
> | /usr/lib/x86_64-linux-gnu/valgrind/memcheck-amd64-linux)
> |
> | sched status:
> |   running_tid=1
> |
> | Thread 1: status = VgTs_Runnable (lwpid 1533)
> | ==1533==    at 0x483BE63: operator new(unsigned long) (in
> | /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
> | ==1533==    by 0x6E92D3C: void std::__cxx11::basic_string<char,
> | std::char_traits<char>, std::allocator<char> >::_M_construct<char
> | const*>(char const*, char const*, std::forward_iterator_tag) (in
> | /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
> | ==1533==    by 0x1C1B2377: C_glcm_textures_helper2(Rcpp::Vector<13,
> | Rcpp::PreserveStorage>, Rcpp::Vector<13, Rcpp::PreserveStorage>, int,
> | Rcpp::Vector<13, Rcpp::PreserveStorage>, Rcpp::String, unsigned long,
> | unsigned long) (glcm_cpp_functions.cpp:221)
> | ==1533==    by 0x1C1A098D: _GLCMTextures_C_glcm_textures_helper2
> | (RcppExports.cpp:94)
> | ==1533==    by 0x1F6B01: R_doDotCall (dotcode.c:622)
> | ==1533==    by 0x2637C9: bcEval (eval.c:7695)
> | ==1533==    by 0x240653: Rf_eval (eval.c:748)
> | ==1533==    by 0x243223: R_execClosure (eval.c:1918)
> | ==1533==    by 0x242EFD: Rf_applyClosure (eval.c:1844)
> | ==1533==    by 0x240E06: Rf_eval (eval.c:871)
> | ==1533==    by 0x246CD6: do_set (eval.c:2990)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x2457DA: do_begin (eval.c:2538)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x244FC9: do_for (eval.c:2420)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x2457DA: do_begin (eval.c:2538)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x244FC9: do_for (eval.c:2420)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x2457DA: do_begin (eval.c:2538)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x243223: R_execClosure (eval.c:1918)
> | ==1533==    by 0x242EFD: Rf_applyClosure (eval.c:1844)
> | ==1533==    by 0x253F32: bcEval (eval.c:7107)
> | ==1533==    by 0x240653: Rf_eval (eval.c:748)
> | ==1533==    by 0x243223: R_execClosure (eval.c:1918)
> | ==1533==    by 0x243D9C: R_execMethod (eval.c:2094)
> | ==1533==    by 0x8800187: R_dispatchGeneric
> (methods_list_dispatch.c:1145)
> | ==1533==    by 0x2B15F4: do_standardGeneric (objects.c:1285)
> | ==1533==    by 0x253DB3: bcEval (eval.c:7096)
> | ==1533==    by 0x240653: Rf_eval (eval.c:748)
> | ==1533==    by 0x243223: R_execClosure (eval.c:1918)
> | ==1533==    by 0x242EFD: Rf_applyClosure (eval.c:1844)
> | ==1533==    by 0x253F32: bcEval (eval.c:7107)
> | ==1533==    by 0x240653: Rf_eval (eval.c:748)
> | ==1533==    by 0x243223: R_execClosure (eval.c:1918)
> | ==1533==    by 0x242EFD: Rf_applyClosure (eval.c:1844)
> | ==1533==    by 0x240E06: Rf_eval (eval.c:871)
> | ==1533==    by 0x246CD6: do_set (eval.c:2990)
> | ==1533==    by 0x240A8C: Rf_eval (eval.c:823)
> | ==1533==    by 0x28EF5E: Rf_ReplIteration (main.c:264)
> | ==1533==    by 0x28F157: R_ReplConsole (main.c:316)
> | ==1533==    by 0x290BC0: run_Rmainloop (main.c:1130)
> | ==1533==    by 0x290BDA: Rf_mainloop (main.c:1137)
> | ==1533==    by 0x16F74B: main (Rmain.c:29)
> | client stack range: [0x1FFEED3000 0x1FFF000FFF] client SP: 0x1FFEFF35F0
> | valgrind stack range: [0x1008FE3000 0x10090E2FFF] top usage: 12336 of
> | 1048576
> |
> |
> | Note: see also the FAQ in the source distribution.
> | It contains workarounds to several common problems.
> | In particular, if Valgrind aborted or crashed after
> | identifying problems in your program, there's a good chance
> | that fixing those problems will prevent Valgrind aborting or
> | crashing, especially if it happened in m_mallocfree.c.
> |
> | If that doesn't help, please report this bug to: www.valgrind.org
> |
> | In the bug report, send all the above text, the valgrind
> | version, and what OS and version you are using.  Thanks.
> |
> | On Mon, Dec 13, 2021 at 8:15 AM Alexander Ilich <ailich at mail.usf.edu>
> wrote:
> |
> | > Hi, I'm upgrading one of my R packages to rely on the terra package
> | > instead of the raster package for the handling of spatial raster data.
> | > Previously when relying on the raster package I had to convert the
> data to
> | > a matrix and send it to C++ to loop through the cells manually, but
> with
> | > the new features in the terra package I can supply a C++ function that
> | > returns multiple values directly to terra::focalCpp to perform focal
> | > operations
> | > <
> https://desktop.arcgis.com/en/arcmap/10.3/tools/spatial-analyst-toolbox/how-focal-statistics-works.htm
> >.
> | > I get the same values using both the old and new versions of the
> functions,
> | > but the new version often causes the R session to abort, especially at
> | > larger window sizes. For example, a 3x3 or a 3x5 window seems to always
> | > run, but a 3x7 window will often cause the R session to abort. However,
> | > when it doesn't, I get the correct values. Functions followed by 2 are
> the
> | > terra versions of the function. By commenting out things and
> rebuilding I
> | > was able to determine the line that causes the crash in the terra
> version
> | > is "NumericMatrix curr_GLCM = C_make_glcm(curr_window, n_levels, shift,
> | > na_opt); //Tabulate the GLCM"; however, this line is also included in
> the
> | > raster version of the function so I'm not sure why this would happen.
> Any
> | > help would be greatly appreciated. Here is the github repository
> | > <https://github.com/ailich/GLCMTextures/tree/terra>, and I've added
> some
> | > sample code below to illustrate the issue.
> | >
> | > Thanks,
> | > Alex
> | >
> | > install.packages('raster', repos='https://rspatial.r-universe.dev')
> | > #install development version of raster
> | > install.packages('terra', repos='https://rspatial.r-universe.dev')
> | > #install development version of terra
> | >
> | > remotes::install_github("ailich/GLCMTextures", ref = "terra") #Install
> | > branch of my package testing terra versions of functions
> | >
> | > library(terra)
> | > library(raster)
> | > library(GLCMTextures)
> | >
> | > r1a<- raster::raster(volcano)
> | > r2a<- glcm_textures(r1a, w=c(3,7), n_levels = 16, quantization = "equal
> | > prob", shift=c(0,1))
> | >
> | > r1b<- terra::rast(volcano)
> | > r2b<- glcm_textures2(r1b, w=c(3,7), n_levels = 16, quantization =
> "equal
> | > prob", shift=c(0,1)) #Often leads to Rsession Aborted
> | >
> | > all.equal(values(r2a),values(r2b)) #TRUE
> | >
> | >
> | >
> | > #System Information
> | > #OS: Windows 10
> | > R.version
> | > # platform       x86_64-w64-mingw32
> | > # arch           x86_64
> | > # os             mingw32
> | > # system         x86_64, mingw32
> | > # status
> | > # major          4
> | > # minor          0.4
> | > # year           2021
> | > # month          02
> | > # day            15
> | > # svn rev        80002
> | > # language       R
> | > # version.string R version 4.0.4 (2021-02-15)
> | > # nickname       Lost Library Book
> | >
> | > packageVersion("terra")
> | > # ‘1.5.2’
> | > packageVersion("raster")
> | > # ‘3.5.10’
> | > packageVersion("Rcpp")
> | > # ‘1.0.7’
> | > packageVersion("RcppArmadillo")
> | > # ‘0.10.7.3.0’
> | > _______________________________________________
> | > Rcpp-devel mailing list
> | > Rcpp-devel at lists.r-forge.r-project.org
> | >
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
> | _______________________________________________
> | Rcpp-devel mailing list
> | Rcpp-devel at lists.r-forge.r-project.org
> | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
> --
> https://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20211213/42a14b2f/attachment-0001.html>


More information about the Rcpp-devel mailing list