Вопрос по – сбросить данные Valgrind

5

Я использую valgrind в программе, которая выполняет бесконечный цикл.

Поскольку memcheck отображает утечки памяти после завершения программы, но поскольку моя программа имеет бесконечный цикл, она никогда не закончится.

Так есть ли способ, которым я могу время от времени принудительно выгружать данные из valgrind.

Спасибо

это не то, что я хочу. Я хочу получить вывод по требованию, и этот VALGRIND_DO_LEAK_CHECK этого не делает .. user414209
Это для меня. Я обновлю свой ответ ниже примером. acm
Если вы нашли мой ответ ниже, решил вашу проблему, вежливо принять ответ. acm

Ваш Ответ

3   ответа
7

клиентские запросы особенность memcheck. Вы, вероятно, можете использовать VALGRIND_DO_LEAK_CHECK или подобное.

РЕДАКТИРОВАТЬ:

В ответ на приведенное выше заявление, что это не работает. Вот пример программы, которая зацикливается навсегда:

#include <valgrind/memcheck.h>
#include <unistd.h>
#include <cstdlib>

int main(int argc, char* argv[])
{

  while(true) {
    char* leaked = new char[1];
    VALGRIND_DO_LEAK_CHECK;
    sleep(1);
  }

  return EXIT_SUCCESS;
}

Когда я запускаю это в valgrind, я получаю бесконечный вывод новых утечек:

$ valgrind ./a.out
==16082== Memcheck, a memory error detector
==16082== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==16082== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==16082== Command: ./a.out
==16082== 
==16082== LEAK SUMMARY:
==16082==    definitely lost: 0 bytes in 0 blocks
==16082==    indirectly lost: 0 bytes in 0 blocks
==16082==      possibly lost: 0 bytes in 0 blocks
==16082==    still reachable: 1 bytes in 1 blocks
==16082==         suppressed: 0 bytes in 0 blocks
==16082== Reachable blocks (those to which a pointer was found) are not shown.
==16082== To see them, rerun with: --leak-check=full --show-reachable=yes
==16082== 
==16082== 1 bytes in 1 blocks are definitely lost in loss record 2 of 2
==16082==    at 0x4C2BF77: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==16082==    by 0x4007EE: main (testme.cc:9)
==16082== 
==16082== LEAK SUMMARY:
==16082==    definitely lost: 1 bytes in 1 blocks
==16082==    indirectly lost: 0 bytes in 0 blocks
==16082==      possibly lost: 0 bytes in 0 blocks
==16082==    still reachable: 1 bytes in 1 blocks
==16082==         suppressed: 0 bytes in 0 blocks
==16082== Reachable blocks (those to which a pointer was found) are not shown.
==16082== To see them, rerun with: --leak-check=full --show-reachable=yes
==16082== 
==16082== 2 bytes in 2 blocks are definitely lost in loss record 2 of 2
==16082==    at 0x4C2BF77: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==16082==    by 0x4007EE: main (testme.cc:9)
==16082== 
==16082== LEAK SUMMARY:
==16082==    definitely lost: 2 bytes in 2 blocks
==16082==    indirectly lost: 0 bytes in 0 blocks
==16082==      possibly lost: 0 bytes in 0 blocks
==16082==    still reachable: 1 bytes in 1 blocks
==16082==         suppressed: 0 bytes in 0 blocks
==16082== Reachable blocks (those to which a pointer was found) are not shown.
==16082== To see them, rerun with: --leak-check=full --show-reachable=yes

Программа не заканчивается.

Error: User Rate Limit Exceeded user414209
0


Замечания:
- Программа должна запускаться с valgrind (valgrind myProg ...)
- пакет valgrind-devel должен быть установлен (иметь)

3

олочки, используя vgdb.

Смотрите, напримерhttp://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.monitor-commands (вы можете выполнять эти команды мониторинга из gdb или из командной строки оболочки, используя vgdb).

Похожие вопросы