为什么 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
我想在 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 |