[R] some general advice sought on the use of gctorture()
Martin Morgan
mtmorgan at fredhutch.org
Fri Apr 24 16:03:41 CEST 2015
On 04/24/2015 06:49 AM, Franckx Laurent wrote:
> Dear all
>
> I have bumped into the dreaded 'segfault' error type when running some C++
> code using .Call().
segfaults often involve invalid memory access at the C level that are best
discovered via valgrind or similar rather than gctorture. A good way to spot
these is to
(a) come up with a _minimal_ reproducible script test.R that takes just a few
seconds to run and that tickles, at least some times, the segfault
(b) make sure that your package is compiled without optimizations and with
debugging symbols, e.g., in ~/.R/Makevars add the lines
CFLAGS="-ggdb -O0"
CXXFLAGS="-ggdb -O0"
(c) run the code under 'valgrind'
R -d valgrind -f test.r
Look especially for 'invalid read' or 'invalid write' messages, and isolate
_your_ code in the callback that the message produces.
There is a 'worked example' at
http://bioconductor.org/developers/how-to/c-debugging/#case-study
Of course this might lead to nothing, and then you'll be back to your original
question about using gctorture or other strategies.
Martin Morgan
>
> I have already undertaken several attempts to debug the C++ code with gdb(),
> but until now I have been unable to pinpoint the origin of the problem. There
> are two elements that I think are puzzling (a) this .Call() has worked fine
> for about three years, for a variety of data (b) the actual crash occurs at
> random points during the execution of the function (well, random from a human
> eye's point of view).
>
>> From what I understand in the "R extensions" manual, the actual problem may
>> have been around for a while before the actual call to the C++ code. As
>> recommended in the manual, I am now using gctorture() to try to pinpoint
>> the origins of the problem. I can, alas, only confirm that gctorture() has
>> an enormous impact on execution time, even for operations that are normally
>> executed within the blink of an eye. From what I have seen until now,
>> executing all the R code before the crash with gctorture(TRUE) could take
>> months.
>
> I suppose then that the best way to proceed would be to proceed backward from
> the point where the crash occurs when gctorture(FALSE).
>
> I have tried to find some concrete examples of good practices in the use of
> gctorture() to identify memory problems in R, but most of what I have found
> on the web is simply a copy of the help page. Does anybody know more concrete
> and elaborated examples that could give an indication on how to best proceed
> further?
>
>
>
>
>
> Laurent Franckx, PhD Senior researcher sustainable mobility VITO NV |
> Boeretang 200 | 2400 Mol Tel. ++ 32 14 33 58 22| mob. +32 479 25 59 07 |
> Skype: laurent.franckx | laurent.franckx at vito.be | Twitter @LaurentFranckx
>
>
>
>
> VITO Disclaimer: http://www.vito.be/e-maildisclaimer
>
> ______________________________________________ R-help at r-project.org mailing
> list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html and provide commented, minimal,
> self-contained, reproducible code.
>
--
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109
Location: Arnold Building M1 B861
Phone: (206) 667-2793
More information about the R-help
mailing list