簡體   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