2012-06-01 3 views
5

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

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

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

Благодаря

+0

Если вы нашли мой ответ ниже решить вашу проблему, вежлив, чтобы принять ответ. – acm

+0

Это не то, что я хочу. Я хочу получить результат по запросу, и этот VALGRIND_DO_LEAK_CHECK этого не делает. – user414209

+0

Это для меня. На следующем примере я обновляю свой ответ. – acm

ответ

7

Посмотрите на client requests особенность MemCheck. Вы, вероятно, можете использовать VALGRIND_DO_LEAK_CHECK или подобное.

EDIT:

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

#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 

Программа не прекращается.

+0

Спасибо .. Я использую это неправильно. – user414209

0

Использование VALGRIND_DO_LEAK_CHECK (ответ acm) работает для меня.
Примечания:
- Программа должна быть запуск с Valgrind (Valgrind MyProg ...)
- Valgrind-разви пакет должен быть установлен (иметь)