On 1 Dec 2012, at 16:09, William Dunlap <wdun...@tibco.com> wrote:

>> valgrind is usually effective for this
>> 
>>  R -d valgrind -f myscript.R
> 
> And adding the R command
>    gctorture(TRUE)
> to the top of your script lets valgrind do a better job of
> find memory misuse.

That makes things even slower: it really only helps when PROTECT is used 
incorrectly (including not used): this error looks more like a memory over-run.

Note that valgrind is really only effective for under/over-run errors involving 
memory allocated by R if the build of R is instrumented (see 'Writing R 
Extensions').

> 
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
> 
> 
>> -----Original Message-----
>> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
>> Behalf
>> Of Martin Morgan
>> Sent: Saturday, December 01, 2012 6:54 AM
>> To: Duncan Murdoch
>> Cc: r-help@r-project.org; Donatella Quagli
>> Subject: Re: [R] segfault debugging
>> 
>> On 12/01/2012 04:51 AM, Duncan Murdoch wrote:
>>> On 12-12-01 6:56 AM, Donatella Quagli wrote:
>>>> Thank you so far. Here is an excerpt from the gdb session after a crash:
>>>>   Program received signal SIGSEGV, Segmentation fault.
>>>> 
>>>>   0xb7509a6b in Rf_allocVector () from /usr/lib/R/lib/libR.so
>>>>   (gdb) backtrace
>>>>   #0  0xb7509a6b in Rf_allocVector () from /usr/lib/R/lib/libR.so
>>>>   #1  0xb744b64c in ?? () from /usr/lib/R/lib/libR.so
>>>>   #2  0xb74c58bf in ?? () from /usr/lib/R/lib/libR.so
>>>>   #3  0xb74c9c62 in Rf_eval () from /usr/lib/R/lib/libR.so
>>>>   #4  0xb74ce60f in Rf_applyClosure () from /usr/lib/R/lib/libR.so
>>>>   #5  0xb74c9f29 in Rf_eval () from /usr/lib/R/lib/libR.so
>>>>   #6  0xb7503002 in Rf_ReplIteration () from /usr/lib/R/lib/libR.so
>>>>   #7  0xb7503298 in ?? () from /usr/lib/R/lib/libR.so
>>>>   #8  0xb7503812 in run_Rmainloop () from /usr/lib/R/lib/libR.so
>>>>   #9  0xb7503839 in Rf_mainloop () from /usr/lib/R/lib/libR.so
>>>>   #10 0x08048768 in main ()
>>>>   #11 0xb728de46 in __libc_start_main (main=0x8048730 <main>, argc=8,
>>>> ubp_av=0xbfdb7824, init=0x80488a0 <__libc_csu_init>,
>>>>       fini=0x8048890 <__libc_csu_fini>, rtld_fini=0xb7784590,
>>>> stack_end=0xbfdb781c) at libc-start.c:228
>>>>   #12 0x08048791 in _start ()
>>>> 
>>>> It seems to me that the error is in frame #0. Does it mean that there is a 
>>>> bug
>>>> in libR.so?  What can I do next?
>>> 
>>> It means that the error was detected when trying to do a memory allocation.
>>> That could be a bug in R, but more likely something else has damaged the 
>>> memory
>>> management system structures, e.g. a function writing to memory that it 
>>> doesn't
>>> own.
>>> 
>>> Bugs like this are hard to track down, because the damage could have 
>>> occurred a
>>> long time before it showed up, and small changes to your script could 
>>> affect it.
>>> 
>>> I would try to narrow it down to a single statement in your script.  You 
>>> might
>>> be able to deduce that from the last line printed before the crash.  If you
>>> don't have any printing, you could try adding some, but as I mentioned 
>>> above,
>>> that might make the bug behave differently.
>>> 
>>> Another approach is to cut off statements at the end of your script. That
>>> probably won't affect the bug until you cut off the statement that actually
>>> triggered it (but it might, which is why this kind of bug is so frustrating 
>>> to
>>> track down).
>>> 
>>> If you find the bad statement, then look at calls to external code in it, or
>>> recently executed before it.  See if any of them look like they contain 
>>> errors.
>>> Common errors are to write to an array without allocating it, or to write 
>>> beyond
>>> the bounds of an array, or (in .Call() code) to allocate something and then 
>>> fail
>>> to protect it from garbage collection.
>>> 
>>> You could also figure out what the problem is that caused the seg fault in 
>>> frame
>>> 0.  It might be because some particular variable contains a garbage value.  
>>> Then
>>> in a new run, you can ask gdb to break when that memory location takes on 
>>> the
>>> garbage value.  This is usually effective if you really can identify the bad
>>> value, but doing that can be hard, especially when you aren't familiar with 
>>> how
>>> things normally work.
>> 
>> valgrind is usually effective for this
>> 
>>   R -d valgrind -f myscript.R
>> 
>> but it requires an operating system where it is available (e.g., linux) and a
>> quick (say less than 10's of seconds) way of reproducing the bug (because
>> valgrind slows evaluation alot). So the first step is really to narrow down 
>> your
>> large script to something that is easier to re-run., e.g., saving the 
>> important
>> R objects to a file shortly before the problem section of your script, then
>> reproducing the problem by loading those and evaluating a few steps of the 
>> code.
>> The bug can still be intermittent; valgrind will likely spot the problem.
>> 
>> Martin
>> 
>>> 
>>> Good luck!
>>> 
>>> Duncan Murdoch
>>> 
>>> ______________________________________________
>>> R-help@r-project.org mailing list
>>> 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
>> 
>> ______________________________________________
>> R-help@r-project.org mailing list
>> 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.
> 
> ______________________________________________
> R-help@r-project.org mailing list
> 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.

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to