为什么 Valgrind return 可执行文件的退出代码?

Why does Valgrind return executable file's exit code?

我想在 cp Linux 命令中 运行 Valgrind 并观察 Valgrind 的 XML 结果。

当我 运行 下面的命令得到 XML 输出时,退出代码是 1。因为 Valgrind 运行s cp 命令。

valgrind --xml=yes --leak-check=full --verbose --track-origins=no --xml-file=/home/user/Desktop/test/cp_valgrind.xml --log-file=/home/user/Desktop/test/cp_valgrind.txt --error-exitcode=100 /home/user/Desktop/test/cp

我收到以下错误:

/home/user/Desktop/test/cp: missing file operand
Try '/home/user/Desktop/test/cp --help' for more information.

为什么 Valgrind return 可执行文件的退出代码? 我如何在没有 Valgrind 运行 的可执行文件上 运行 Valgrind?

Valgrind 将 return 来宾 return 默认值。

如果您指定 --error-exitcode 那么如果从 Valgrind 工具 来宾 returns 0。它仍然会return guest return 值,Valgrind 工具检测不到任何错误。它不会将访客错误代码转换为 --error-exitcode 指定的值,也不会覆盖 non-zero 访客错误代码。

在下面的 table 中,invalid_free 是一个小测试用例,它会生成一个 memcheck 错误,但是 returns 0.

No mem error, no guest error No mem error, guest error Mem error, no guest error
Standalone pwd ; echo $? -> 0 cp ; echo $? -> 1 invalid_free ; echo $? -> 0
Under memcheck valgrind -q pwd ; echo $? -> 0 valgrind -q cp ; echo $? -> 1 valgrind -q invalid_free ; echo $? -> 0
Under memcheck with --error-code valgrind -q --error-exitcode=42 pwd ; echo $? -> 0 valgrind -q --error-exitcode=42 cp ; echo $? -> 1 valgrind -q --error-exitcode=42 invalid_free ; echo $? -> 42

还有第 4 列,我不滚动就放不下

Mem error, guest error
Standalone invalid_free2 ; echo $? -> 1
Under memcheck valgrind -q invalid_free2 ; echo $? -> 1
Under memcheck with --error-code valgrind -q --error-exitcode=42 invalid_free2 ; echo $? -> 1