【发布时间】:2019-08-06 01:30:40
【问题描述】:
我正在使用名为RcppCoDA的 RcppEigen 编写一个 R 包
我认为我的项目中某处可能存在内存泄漏,但我不确定。不幸的是,我在运行 Valgrind 时遇到了麻烦,因为它似乎不支持 OS X Mojave,而且我遇到了详细的错误 here。
我认为重现错误应该很容易:
library(RcppCoDA) # devtools::install_github("jsilve24/RcppCoDA")
library(microbenchmark)
d <- c(100,1000)
X <- matrix(abs(rnorm(prod(d))), d[1], d[2])
X <- clo(X)
# This runs fine
z <- RcppCoDA::alr(X, d=4)
# This for some reason takes forever to run... I think this might be a bug
for (i in 1:1000){
z <- RcppCoDA::alr(X, d=4)
}
# This causes RStudio to crash... or takes forever to run...
microbenchmark(
RcppCoDA::alr(X, d=4), times=10
)
我一遍又一遍地重读代码,不知道我怎么会出现内存错误,除非我只是以某种方式滥用 Rcpp...不幸的是,因为我似乎无法让 Valgrind 工作as outlined here我我真的不知道如何调试。我什至不确定我的代码或其他地方是否存在错误。
任何帮助将不胜感激!
【问题讨论】:
-
在 macOS 上安装 Docker。在容器中调试。或者以另一种方式获得 Linux shell。 Writing R Extensions 中强调这些工具是有原因的。
-
你可以试试
rhub::check_with_valgrind()。如果这对您有用,您也可以在本地使用该特定 Docker 容器。 -
在 mac 上设置 docker 以进行 R 包开发的一些帮助:stat.ethz.ch/pipermail/r-devel/2019-August/078269.html
-
鉴于我大部分是通过电子邮件编写的,因此我将把它变成一篇博客文章 :) 这是一个简单的案例,尽管 Roger 只需要 gfortran-9。然而这里
apt-get install valgrind并不复杂......