如何让 valgrind 忽略特定行?
How to make valgrind ignore certain line?
例如
==26460== 2 bytes in 1 blocks are still reachable in loss record 2 of 105
==26460== at 0x4C28BE3: malloc (vg_replace_malloc.c:299)
==26460== by 0x580D889: strdup (in /usr/lib64/libc-2.17.so)
==26460== by 0x4F50AF: init (init.c:468)
==26460== by 0x406D75: main (main.c:825)
我不想检查 init.c:468: mode = strdup
,我确定这只会 malloc 一次,并且会持续整个过程生命周期。
是否可以让 valgrind 不检查这一行?
正如我在评论中所说:我建议不要这样做。
但是 Valgrind 确实具有抑制警告的功能。
专用于该目的的功能支持抑制特定消息的最便捷方式:
--gen-suppressions=yes
这显然会为 each/any 生成的消息输出精确的抑制语法。
参见常见问题中的 5.1:
http://valgrind.org/docs/manual/faq.html#faq.writesupp
(我喜欢他们的风格:
"F:Can you write ... for me?" 我期待一个完全足够的
"A:No." 但他们确实回答了
"A: Yes ..."。超酷。)
你应该修复漏洞;这样做要好得多。
您无法阻止 Valgrind 检查泄漏,但您可以通过抑制泄漏来阻止它报告泄漏。
使用:
valgrind --gen-suppressions=yes --leak-check=all -- tested-program …
然后您可以将抑制保存在一个文件中,比如 tp.suppressions
,随后您可以使用:
valgrind --suppressions=tp.suppressions -- tested-program …
如果您像我一样在 Mac 上工作,并且使用前沿系统,您通常会发现有必要抑制系统启动代码的泄漏 — 在 [=13= 之前分配的内存] 被调用,因此您无法控制。
OTOH,macOS 新版本发布后,再次获取 Valgrind 运行 是例行公事。我升级到 macOS High Sierra 10.13;由于无法识别内核,Valgrind 再次停止工作。
例如
==26460== 2 bytes in 1 blocks are still reachable in loss record 2 of 105
==26460== at 0x4C28BE3: malloc (vg_replace_malloc.c:299)
==26460== by 0x580D889: strdup (in /usr/lib64/libc-2.17.so)
==26460== by 0x4F50AF: init (init.c:468)
==26460== by 0x406D75: main (main.c:825)
我不想检查 init.c:468: mode = strdup
,我确定这只会 malloc 一次,并且会持续整个过程生命周期。
是否可以让 valgrind 不检查这一行?
正如我在评论中所说:我建议不要这样做。
但是 Valgrind 确实具有抑制警告的功能。 专用于该目的的功能支持抑制特定消息的最便捷方式:
--gen-suppressions=yes
这显然会为 each/any 生成的消息输出精确的抑制语法。
参见常见问题中的 5.1:
http://valgrind.org/docs/manual/faq.html#faq.writesupp
(我喜欢他们的风格:
"F:Can you write ... for me?" 我期待一个完全足够的
"A:No." 但他们确实回答了
"A: Yes ..."。超酷。)
你应该修复漏洞;这样做要好得多。
您无法阻止 Valgrind 检查泄漏,但您可以通过抑制泄漏来阻止它报告泄漏。
使用:
valgrind --gen-suppressions=yes --leak-check=all -- tested-program …
然后您可以将抑制保存在一个文件中,比如 tp.suppressions
,随后您可以使用:
valgrind --suppressions=tp.suppressions -- tested-program …
如果您像我一样在 Mac 上工作,并且使用前沿系统,您通常会发现有必要抑制系统启动代码的泄漏 — 在 [=13= 之前分配的内存] 被调用,因此您无法控制。
OTOH,macOS 新版本发布后,再次获取 Valgrind 运行 是例行公事。我升级到 macOS High Sierra 10.13;由于无法识别内核,Valgrind 再次停止工作。