[Rd] enabling core dumps

Martin Morgan mtmorgan at fhcrc.org
Fri Sep 4 18:38:40 CEST 2009


pleydell at supagro.inra.fr wrote:
>> not really answering your question, but I find it more useful to
>>
>>  R -d gdb
>>
>> or
>>
>>  R -d gdb -f test.R
>>
>> where test.R reproduces the bug in some minimal code. A variant is
>>
>>  R -d valgrind -f test.R
>>
>> if the memory problem is not easy to spot.
> 
> Thanks for your reply Martin
> 
> Yes, I have used that route before, I have also been playing with the
> emacs "M-x
> gdb" option as describe in the R FAQ. But having no first hand
> expertience with
> core dumps I am curious why you prefer the -d flag route. Perhaps I'm
> wrong but
> I thought examining a core dump enables you to backtrace from the moment
> things
> went wrong, this seems to be a useful trick to have...
> 
> ... if you manage to enable the core dump option that is.

usually what happens is (# meant to be a comment char)

  % R -d gdb -f test.R
  gdb> run
  ...segfault happens, breaks into gdb
  gdb> bt # print the backtrace
  gdb> up # move up the stack, to get to 'your' frame
  gdb> l # show source listing, use -O0 compiler flag, see gdb> help dir
  gdb> print some_suspect_variable
  gdb> call Rf_PrintValue(some_suspect_sexp)
  gdb> break suspect_function
  gdb> run # restart script, but break at suspect_function

and so on, i.e., you've got all the info you need. A neat trick is to
leave gdb running, repair and R CMD SHLIB your C code, return to gdb and

  gdb> run

to restart the same script but using the new shared lib (possibly
preserving breakpoints and other debugging info you'd used in previous
sessions).

I'm a heavy emacs user but find it easier to stick with gdb from the
shell -- one less layer to get in the way, when I'm confused enough as
it is.

Martin
> 
> cheers
> David
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list