1

假设我们已经配置了最大诊断的自动 Valgrind 测试设置(--leak-check=yes --track-origins=yes等)。但是,在某些测试中,由于某些不确定的错误,valgrind 进程可能会因 SIGSEGV 而崩溃。在这种情况下,导致 SIGSEGV 的即时诊断很有用,但 Valgrind 并没有就此止步,而是将每个实时内存分配作为泄漏转储,数以万计的泄漏 - 这在随机 SIGSEGV 的情况下是无用的。

有没有办法将 Valgrind 配置为

  • 在程序执行期间打印任何错误并且不要中止;
  • 定期退出时,转储内存泄漏;
  • 在 SIGSEGV/SIGABRT/SIGILL/SIG... 退出时,不要转储内存泄漏?

编辑:这已于 2011 年在 Valgrind 错误跟踪器中记录:https ://bugs.kde.org/show_bug.cgi?id=265371

4

1 回答 1

1

valgrind 泄漏搜索只能在“程序正常退出”时激活,而在“崩溃退出”时不能激活。

您可能会通过使用 --vgdb-error=0 获得此结果,然后(使用脚本):使用 gdb+vgdb 连接到 valgrind gdbserver,在 gdb 中捕获您想要的信号,并让 gdb 在收到信号:valgrind gdbserver 有一个命令 v.kill 将使 valgrind 退出而不进行其通常的“生命终结”泄漏搜索。

于 2018-11-30T00:00:06.923 回答