我正在尝试修复我在CRAN上的软件包CamelUp的一些问题。这个包使用Rcpp来实现一个棋盘游戏。我最近提交的CRAN提交的评论和输出如下:
==32365== 16,591,624 (2,608,512 direct, 13,983,112 indirect) bytes in
20,379 blocks are definitely lost in loss record 3,036 of 3,036
==32365== at 0x4838E86: operator new(unsigned long)
(/builddir/build/BUILD/valgrind-3.15.0/coregrind/m_replacemalloc/vg_replace_malloc.c:344)
==32365== by 0x184ED3E5: Board::Board(Board const&)
(/tmp/CamelUp.Rcheck/00_pkg_src/CamelUp/src/Board.cpp:67)
...
==32365== by 0x1853045D: Simulator::simulateDecision(bool, int)
(/tmp/CamelUp.Rcheck/00_pkg_src/CamelUp/src/Simulator.cpp:64)
==32365== by 0x18536509: Rcpp::CppMethod2<Simulator, Rcpp::Vector<19,
Rcpp::PreserveStorage>, bool, int>::operator()(Simulator*, SEXPREC**)
(R-devel/site-library/Rcpp/include/Rcpp/module/Module_generated_CppMethod.h:195)
==32365== by 0x18535B32:
Rcpp::class_<Simulator>::invoke_notvoid(SEXPREC*, SEXPREC*, SEXPREC**,
int) (R-devel/site-library/Rcpp/include/Rcpp/module/class.h:234)
==32365== by 0x17B9EBE1: CppMethod__invoke_notvoid(SEXPREC*)
(/tmp/RtmpKDbrDI/R.INSTALL1d1838b282b2/Rcpp/src/module.cpp:220)我在复制这些错误时遇到了麻烦,我想知道是否有一种简单的方法可以在我的包中使用valgrind来复制这些错误。我尝试在本地使用valgrind运行,但无法让跟踪起源选项工作,也无法清楚地指出这些错误在我的代码中的位置。我还尝试将Travis-CI与以下.travis.yml文件一起使用:
language: r
cache: packages
r_check_args: '--use-valgrind'
addons:
apt:
packages:
- valgrind
r:
- oldrel
- release
- devel
env:
- VALGRIND_OPTS='--tool=memcheck --memcheck:leak-check=full --track-origins=yes'我希望有一种方法可以复制这些错误,这样我就可以修复它们。
发布于 2020-07-17 23:55:34
我成功地使用Docker为我的测试运行了valgrind,但我最终决定集成此测试的最好方法是使用Travis-CI。我的.travis.yml文件如下所示:
language: r
cache: packages
addons:
apt:
packages:
- valgrind
r:
- oldrel
- release
- devel
after_success:
- R -e "install.packages('${PKG_TARBALL}', repos=NULL, type='source')"
- cd tests
- R -d "valgrind --tool=memcheck --leak-check=full --track-origins=yes" --vanilla < testthat.R
- cd ..这现在使用valgrind运行测试,尽管我必须手动滚动才能看到结果。在某些情况下,如果有内存泄漏,我会让构建失败,但现在这对我来说是有效的。我很不熟悉Docker和valgrind,并且没有意识到我需要在testthat.R中运行测试目录。
https://stackoverflow.com/questions/62662707
复制相似问题