首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >valgrind :一次打开多个抑制文件

valgrind :一次打开多个抑制文件
EN

Stack Overflow用户
提问于 2010-12-01 23:43:12
回答 3查看 1.6K关注 0票数 2

我有一个使用valgrind执行单元测试的脚本。现在脚本变得很大,因为我可能有10个抑制文件(每个库一个),而且我可能必须添加更多的抑制文件。

现在不是像这样写一行:

代码语言:javascript
复制
MEMCHECK_OPTIONS="--tool=memcheck -q -v --num-callers=24 --leak-check=full --show-below-main=no --undef-value-errors=yes --leak-resolution=high --show-reachable=yes --error-limit=no --xml=yes --suppressions=$SUPPRESSION_FILES_DIR/suppression_stdlib.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_cg.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_glut.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_xlib.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_glibc.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_glib.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_qt.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_sdl.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_magick.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_sqlite.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_ld.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_selinux.supp --suppressions=$SUPPRESSION_FILES_DIR/suppression_opengl.supp"

我试着这样做:

代码语言:javascript
复制
MEMCHECK_OPTIONS="--tool=memcheck -q -v --num-callers=24 --leak-check=full --show-below-main=no --undef-value-errors=yes --leak-resolution=high --show-reachable=yes --error-limit=no --xml=yes --suppressions=$SUPPRESSION_FILES_DIR/*.supp"

但是valgrind需要一个文件名(不接受asterix)。

由于我是在bash脚本中执行此操作,有人能告诉我形成这行代码的最简单方法是什么吗?

我考虑列出抑制目录中的所有文件,然后遍历该列表,并添加--suppressions=前缀。

编辑

我忘了问了。这就是我到目前为止所知道的:

代码语言:javascript
复制
ALL_SUPPRESION_FILES=`ls $SUPPRESSION_FILES_DIR/*.supp`

但我找不到如何将其转换为数组。有人能帮帮忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-02 10:47:55

只需这样做:

代码语言:javascript
复制
# form the list of suppression files to pass to the valgrind
VALGRIND_SUPPRESSION_FILES_LIST=""
for SUPPRESSION_FILE in $SUPPRESSION_FILES_DIR/*.supp; do
  VALGRIND_SUPPRESSION_FILES_LIST+=" --suppressions=$SUPPRESSION_FILE"
done

没有必要使用ls

这里有一种不需要循环的方法:

代码语言:javascript
复制
array=($SUPPRESSION_FILES_DIR/*.supp)
VALGRIND_SUPPRESSION_FILES_LIST=${array[@]/#/--suppressions=}

如果文件名包含空格,这两种方法都不能正常工作,但其他步骤可以解决这一问题。

票数 5
EN

Stack Overflow用户

发布于 2019-05-26 19:36:25

对于那些仍然面临这个问题的人-看看Valgrind Suppression File Howto

当valgrind运行其默认工具Memcheck时,它会自动尝试读取名为$PREFIX/lib/valgrind/default.supp的文件($PREFIX通常为/usr)。但是,您可以通过将--suppressions=添加到命令行调用中,使其使用您选择的其他抑制文件。您可以重复此操作多达100次,这对于大多数情况应该足够了;)

每次运行时,都会在名为~/.valgrindrc和./.valgrindrc的文件中查找选项。..。

如果文件尚不存在,请创建这些文件。因此,我现在有一个~/.valgrindrc,其中包含:

代码语言:javascript
复制
--memcheck:leak-check=full
--show-reachable=yes
--suppressions=/file/path/file1.supp
--suppressions=/file/path/file2.suppth/file2.supp

要检查valgrind是否确实在使用抑制文件,请使用-v选项运行它。读取的抑制文件列表位于输出的开头附近。

票数 1
EN

Stack Overflow用户

发布于 2010-12-02 00:07:03

好吧,我设法这样解决了这个问题:

代码语言:javascript
复制
# form the list of suppression files to pass to the valgrind
ALL_SUPPRESION_FILES=`ls $SUPPRESSION_FILES_DIR/*.supp`
VALGRIND_SUPPRESSION_FILES_LIST=""
for SUPPRESSION_FILE in ${ALL_SUPPRESION_FILES[@]}; do
  VALGRIND_SUPPRESSION_FILES_LIST="$VALGRIND_SUPPRESSION_FILES_LIST --suppressions=$SUPPRESSION_FILE"
done

我使用tokenizing stringsconcanating strings来形成列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4326086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档