如何在Bash脚本中将Valgrind的报告赋值给变量?
Valgrind输出捕获问题解决
问题原因
Valgrind的诊断报告默认输出到标准错误流(stderr),你之前的命令只重定向了程序的标准输出(stdout)到/dev/null,导致Valgrind的内容直接打印到终端,无法被$()捕获到变量中。
修正命令
将标准错误流也重定向到标准输出,这样就能把Valgrind的报告完整存入变量:
TEST=$(valgrind ./a.out < "${infiles["$((len-1))"]}" >/dev/null 2>&1)
>/dev/null:丢弃程序自身的标准输出2>&1:将标准错误(Valgrind的输出)重定向到标准输出,让$()可以捕获
后续错误汇总示例
捕获到Valgrind报告后,可通过grep提取关键信息:
# 提取内存泄漏汇总 LEAK_SUMMARY=$(echo "$TEST" | grep -A 5 "LEAK SUMMARY") # 提取错误提示(如非法内存访问) ERROR_DETAILS=$(echo "$TEST" | grep -E "(ERROR SUMMARY|Invalid)")
内容的提问来源于stack exchange,提问作者Neutrino
相关产品推荐
相关产品推荐

