我有一个使用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"我试着这样做:
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=前缀。
编辑
我忘了问了。这就是我到目前为止所知道的:
ALL_SUPPRESION_FILES=`ls $SUPPRESSION_FILES_DIR/*.supp`但我找不到如何将其转换为数组。有人能帮帮忙吗?
发布于 2010-12-02 10:47:55
只需这样做:
# 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。
这里有一种不需要循环的方法:
array=($SUPPRESSION_FILES_DIR/*.supp)
VALGRIND_SUPPRESSION_FILES_LIST=${array[@]/#/--suppressions=}如果文件名包含空格,这两种方法都不能正常工作,但其他步骤可以解决这一问题。
发布于 2019-05-26 19:36:25
对于那些仍然面临这个问题的人-看看Valgrind Suppression File Howto。
当valgrind运行其默认工具Memcheck时,它会自动尝试读取名为$PREFIX/lib/valgrind/default.supp的文件($PREFIX通常为/usr)。但是,您可以通过将--suppressions=添加到命令行调用中,使其使用您选择的其他抑制文件。您可以重复此操作多达100次,这对于大多数情况应该足够了;)
每次运行时,都会在名为~/.valgrindrc和./.valgrindrc的文件中查找选项。..。
如果文件尚不存在,请创建这些文件。因此,我现在有一个~/.valgrindrc,其中包含:
--memcheck:leak-check=full
--show-reachable=yes
--suppressions=/file/path/file1.supp
--suppressions=/file/path/file2.suppth/file2.supp要检查valgrind是否确实在使用抑制文件,请使用-v选项运行它。读取的抑制文件列表位于输出的开头附近。
发布于 2010-12-02 00:07:03
好吧,我设法这样解决了这个问题:
# 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 strings和concanating strings来形成列表。
https://stackoverflow.com/questions/4326086
复制相似问题