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

BЈо*_*вић 2 linux bash valgrind

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

现在,而不是有这样的一行:

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"
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

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"
Run Code Online (Sandbox Code Playgroud)

但 valgrind 需要一个文件名(不接受星号)。

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

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

编辑

我忘了问。这是我到目前为止:

ALL_SUPPRESION_FILES=`ls $SUPPRESSION_FILES_DIR/*.supp`
Run Code Online (Sandbox Code Playgroud)

但我找不到如何将其传输到数组中。有人可以帮忙吗?

Pau*_*ce. 5

只需这样做:

# 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
Run Code Online (Sandbox Code Playgroud)

没有必要ls

这是一种无需循环即可完成的方法:

array=($SUPPRESSION_FILES_DIR/*.supp)
VALGRIND_SUPPRESSION_FILES_LIST=${array[@]/#/--suppressions=}
Run Code Online (Sandbox Code Playgroud)

如果文件名包含空格,这些都不能正常工作,但额外的步骤可以解决这个问题。