我正在使用 RcppEigen 编写一个名为 RcppCoDA 的 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我真的不知道如何调试。我什至不确定我的代码或其他地方是否存在错误。
任何帮助将不胜感激!
最佳答案
感谢一些有用的评论,我能够让 Valgrind 在 docker 镜像中工作。
简单介绍一下我是如何做到的:
- 我使用了 docker 镜像:rocker/rstudio
- 启动镜像/容器:
docker run rocker/rstudio
- 运行后:在单独的终端中:
docker ps
- 获取正在运行的镜像的容器ID,然后运行:
docker exec -it <containerID> bash
- 安装 valgrind 和 devtools 所需的许多其他东西
- 使用 valgrind 调试运行 R:
R -d "valgrind --leak-check=full"
- 运行导致错误的任何代码并评估 valgrind 输出。
感谢您的帮助!
关于c++ - 调试可能的 Rcpp 内存泄漏时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57360360/