有没有办法压制Valgrind的memcheck,直到达到一个定义的(以任何方式发出信号)稳定状态;即应用程序启动完成,我只想从现在开始跟踪新的分配。基于时间或使用Unix信号或类似机制。
memcheck必须跟踪所有已分配(和释放)的内存:如果它只能从某个时间点跟踪内存,那么对此时间之前分配的内存的所有访问都将被视为访问未分配的内存。
现在,根据您在此稳定状态之前“避免看到”的内容,您可以做些事情。
如果您不希望在稳定状态之前看到错误,则可以在应用程序启动后立即调用VALGRIND_DISABLE_ERROR_REPORTING,并在达到稳定状态时调用VALGRIND_ENABLE_ERROR_REPORTING。
如果您希望看到的是在此稳定状态之后分配了多少内存,则可以在达到稳定状态时执行内存泄漏搜索以显示内存状态。之后,您可以执行“delta leak search”,显示自上次泄漏搜索以来已分配/释放的内容。
您可以使用vgdb从shell以交互方式执行此操作,或使用GDB + vgdb在程序中放置断点并在程序中的精确位置执行上述操作。
参见例如http://www.valgrind.org/docs/manual/manual-core-adv.html和http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.monitor-commands了解更多信息。