The problem with using gdb is you'd find yourself in the garbage collector, but perhaps quite removed from where the corruption occurred, e.g., gc() might / will likely be triggered after you've returned to the top-level evaluation loop, and the part of your code that did the corruption might be off the stack.
The problem with devtools::check() (and R CMD check) is that running the unit tests occurs in a separate process, so things like setting a global option (and even system variable from within R) may not be visible in the process doing the check. Conversely, for the same reasons, it seems like the problem can be tickled by running the tests alone. So R -f <your_source>/tests/testthat.R would seem to be a good enough starting point. Actually, I liked Henrik's UBSAN suggestion, which requires the least amount of work. I think I'd then try R -d valgrind -f <your_source>/tests/testthat.R and then further into the weeds... actually from the section of R-exts you mention R_C_BOUNDS_CHECK=yes R -f <your_source>/tests/testthat.R might also be promising. Martin On 10/12/21, 10:30 PM, "Bioc-devel on behalf of Pariksheet Nanda" <bioc-devel-boun...@r-project.org on behalf of pariksheet.na...@uconn.edu> wrote: Hi all, On 10/12/21 6:43 PM, Pariksheet Nanda wrote: > > Error in `...`: internal logical NA value has been modified In the R source code, this error is in src/main/memory.c so I was thinking one way of investigating might be to run `R --debugger gdb`, then running R to load the symbols and either: 1) set a breakpoint for when it reaches that particular line in memory.c:R_gc_internal and then walk up the stack, 2) or set a watch point on memory.c:R_gc_internal:R_LogicalNAValue (somehow; having trouble getting gdb to reach that context). 3) Then I thought, maybe this is getting far into the weeds and instead I could check the most common C related error by enabling bounds checking of my C arrays per section 4.4 of the R-exts manual: $ R -q > options(CBoundsCheck = TRUE) > Sys.setenv(R_C_BOUNDS_CHECK = "yes") # Try both ways *shrug* > devtools::test() ... # All tests still pass. > devtools::check() ... # No change :( Maybe I'm not sure I'm using that option correctly? Or the option is ignored in devtools::check(). Or indeed, the error is not from over running C array boundaries. It turns out that using the precompiled debug symbols[1] isn't all that useful here because I don't get line numbers in gdb without the source files and many symbols are optimized out, so it looks like I would need to compile R from source with -ggdb first instead of using the Debian packages. Hopefully this is still the right approach? Pariksheet [1] After install r-base-core-dbg on Debian for the debug symbols. _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel