R-devel с дезинфицирующим средством от рокера - PullRequest
4 голосов
/ 22 января 2020

Я пытаюсь установить R devel с ASAN USBAN с рокер . После README я попытался:

sudo docker run --rm -ti rocker/r-devel-san

Это заняло много времени, но в конце все было в порядке. Затем я установил пакет sanitizers , чтобы проверить R на наличие известных ошибок.

install.package("sanitizers")

И я попытался получить ошибку

> sanitizers::stackAddressSanitize(42)
[1] 24
> sanitizers::heapAddressSanitize(1)
[1] 0

Я не получил ни одной ошибка, поэтому я предполагаю, что версия R, с которой я работаю docker, не создана с поддержкой sanitizer. Или я просто что-то упустил где-то. Я впервые с docker.

1 Ответ

6 голосов
/ 22 января 2020

Убедитесь, что вы начинаете RD, а не R. Тогда он работает для меня, как и ожидалось:

> install.packages("sanitizers")
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
trying URL 'http://cloud.r-project.org/src/contrib/sanitizers_0.1.0.tar.gz'
Content type 'application/x-gzip' length 3963 bytes
==================================================
downloaded 3963 bytes

* installing *source* package ‘sanitizers’ ...
** package ‘sanitizers’ successfully unpacked and MD5 sums checked
** using staged installation
** libs
g++ -fsanitize=undefined,bounds-strict -fno-omit-frame-pointer -std=gnu++98 -I"/usr/local/lib/R/include" -DNDEBUG   -I/usr/local/include   -fpic  -g -O2 -Wall -pedantic -mtune=native  -c heap_address.cpp -o heap_address.o
g++ -fsanitize=undefined,bounds-strict -fno-omit-frame-pointer -std=gnu++98 -I"/usr/local/lib/R/include" -DNDEBUG   -I/usr/local/include   -fpic  -g -O2 -Wall -pedantic -mtune=native  -c stack_address.cpp -o stack_address.o
g++ -fsanitize=undefined,bounds-strict -fno-omit-frame-pointer -std=gnu++98 -shared -L/usr/local/lib/R/lib -L/usr/local/lib -o sanitizers.so heap_address.o stack_address.o -L/usr/local/lib/R/lib -lR
installing to /usr/local/lib/R/site-library/00LOCK-sanitizers/00new/sanitizers/libs
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded from temporary location
** checking absolute paths in shared objects and dynamic libraries
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (sanitizers)

The downloaded source packages are in
        ‘/tmp/RtmpqpZ0Zg/downloaded_packages’
> sanitizers::stackAddressSanitize(42)
stack_address.cpp:16:32: runtime error: index 142 out of bounds for type 'int [100]'
stack_address.cpp:16:11: runtime error: load of address 0x7fff11a2da88 with insufficient space for an object of type 'int'
0x7fff11a2da88: note: pointer points here
 ff 7f 00 00  00 00 00 00 00 00 00 00  b0 a1 85 ce d0 55 00 00  e3 b1 cb da ed 7f 00 00  78 88 fa cf
              ^ 
[1] 0
> 

Короче говоря, как и в контейнерах r-devel, вам нужна не-ванильная версия RD, а не R, которая представляет собой простой ванильный R из стандартного двоичного пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...