繁体   English   中英

在Travis CI上为R包指定valgrind选项

[英]Specify valgrind options to R package on Travis CI

我正在尝试在Travis CI上使用c ++代码构建R包,并通过使用--use-valgrind选项运行R CMD check来使用valgrind对其进行R CMD check R扩展手册中,它说是提供带有必需选项的~/.valgrindrc文件,或者在环境变量VALGRIND_OPTS但我无法弄清楚这两个。

我在这里创建了一个演示仓库,其中包含一个valgrind应该响应的Rcpp函数。

我的.travis.yml设置如下所示:

language: r
sudo: false
cache: packages

r_check_args: '--use-valgrind'

addons:
  apt:
    packages:
      - valgrind

我有一个.valgrindrc文件,内容如下:

--leak-check=full
--track-origins=yes

,并尝试将其放在./inst/和根目录中,但没有一个起作用。 有人知道如何正确设置这些选项吗?

编辑: 是最新travis版本的链接。

@joepd给出的解决方案可以工作,但是我发现在简单设置环境变量时(也许)更精简的解决方案。

env:
  - VALGRIND_OPTS='--leak-check=full --track-origins=yes'

请注意,由于某些未知原因,valgrind仍建议我们设置--leak-check=full ,这就是让我首先想到另一种解决方案的原因。

根据文档 ,仅当文件~/.valgrindrc不存在且未设置环境变量$VALGRIND_OPTS ,才读取文件./.valgrindrc (因此,在当前工作目录中)。

不知道是什么情况,但是您可能需要执行以下操作:

before_install:
  - "head ~/.valgrindrc || echo '~/.valgrindrc does not exist'"
  - echo VALGRIND_OPTS: $VALGRIND_OPTS
  - cat ./valgrindrc >> ~/.valgrindrc

前两个用于诊断目的。 最后一个可能会解决该问题(它将您的配置附加到全局配置)。 如果这行不通,您可能会对正在发生的事情有更多的了解。

您还可以使用以下脚本来自定义valgrind检查,并标记哪种输出会导致travis故障。 只需制作某种valgrind-script.R来加载和测试程序包功能,然后将其和以下内容放入tests文件夹。 valgrind还需要与.travis.yml一起安装。)

vg_check <- function ()
{
    vg <- system2 (command = 'R',
                   args = c ('-d "valgrind --tool=memcheck --leak-check=full"',
                             '-f valgrind-script.R'),
                   stdout = TRUE, stderr = TRUE)

    lost <- NULL
    types <- c ("definitely lost", "indirectly lost", "possibly lost")
    for (ty in types)
    {
        lost_type <- which (grepl (ty, vg))
        n <- regmatches(vg [lost_type], gregexpr("[[:digit:]]+", vg [lost_type]))
        lost <- c (lost, as.numeric (n [[1]] [2:3]))
    }
    if (any (lost > 0))
        stop ("valgrind memory leaks detected!")

    if (attr (vg, "status") != 0)
        stop ("valgrind error")
}

if (identical (Sys.getenv ("TRAVIS"), "true"))
{
    vg_check ()
}

这使用memcheck ,但是您可以自定义它以使用所需的valgrind工具,并将任何类型的输出转换为travis故障。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM