ms6*_*609 4 unit-testing valgrind r package
我想在我的包的测试、示例和小插图上运行 valgrind。各种消息来源暗示这样做的方法应该是:
R CMD build my-pkg
R CMD check --use-valgrind my-pkg_0.0.tar.gz
Run Code Online (Sandbox Code Playgroud)
R CMD check似乎运行良好,但没有显示 valgrind 输出的证据,即使在设置环境变量之后也是如此VALGRIND_OPTS: --memcheck:leak-check=full。我发现消息来源暗示 R 需要交互运行 valgrind 才能显示输出,但R -d CMD check(或R -d "CMD check") 似乎是错误的格式。
R -d "valgrind --tool=memcheck --leak-check=full" --vanilla < my-pkg.Rcheck/my-pkg-Ex.R确实有效,但仅限于示例文件;我看不到一种简单的方法来针对我的小插图运行它并进行测试。
通过 valgrind 运行所有相关脚本的最佳方法是什么?无论如何,我们的目标是将其集成到 GitHub 操作脚本中。
2022 年 3 月编辑: 情况R CMD check实际上更简单,运行R CMD check --use-valgrind [other options you may want]将运行下面的测试和示例valgrind,然后在示例输出(即)和测试输出(即我使用的)末尾附加标准 valgrind 摘要。现在让我困惑的是,检测到的错误似乎并没有使测试失败。 pkg.Rcheck/pkg-Ex.Rout pkg.Rcheck/tinytest.Routtinytestvalgrind
分隔符下方的原始答案。
对此还有更多内容:您帮助确保 R 构建为此进行了检测。请参阅编写 R 扩展的第 4.3.2 节:
在安装了 valgrind 的平台上,您可以构建带有额外工具的 R 版本,以帮助 valgrind 检测从 R 堆分配的内存使用中的错误。配置选项为 --with-valgrind-instrumentation=level,其中级别为 0、1 或 2。级别 0 是默认值,不添加任何内容。级别 1 将检测未初始化内存的某些使用117,并且对速度影响很小(与级别 0 相比)。2 级将检测许多其他内存使用错误118,但会使 R 在 valgrind 下运行时速度慢得多。将其与 gctorture 结合使用可能会更有效(甚至更慢)。
因此,您可能想为自己构建一个 Docker 化的 R 版本,以便从 GitHub Action 进行调用。我认为 Winston 的优秀“相扑”容器也有 valgrind 构建,所以你也可以尝试一下。它非常大,超过 4GB:
edd@rob:~$ docker images| grep wch # some whitespace edit out
wch1/r-debug latest a88fabe8ec81 8 days ago 4.49GB
edd@rob:~$
Run Code Online (Sandbox Code Playgroud)
当然,如果您测试依赖包,您也必须将它们放入 valgrind 会话......
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |