gpt4 book ai didi

复制 CRAN valgrind 问题

转载 作者:行者123 更新时间:2023-12-04 04:05:02 24 4
gpt4 key购买 nike

我正在尝试修复我在 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 在本地运行,但无法使 track origins 选项起作用,也无法弄清楚这些错误在我的代码中的位置。我还尝试将 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'

我希望有一种方法可以复制这些错误,以便我可以修复它们。

最佳答案

我成功地使用 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 中运行测试。

关于复制 CRAN valgrind 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62662707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com