Как я могу заставить valgrind сообщить мне адрес каждого неосвобожденного блока памяти? - PullRequest
2 голосов
/ 08 октября 2009

Valgrind сообщает мне, что функция xxx выделяет память, которая не была освобождена. Хорошо. Однако проследить это труднее, чем обычно.

Для этого я создал множество:

#ifdef DEBUG
fprintf(stderr, "something happening:%lx\n", (unsigned long)ptr);
#endif

Так что мне просто нужно сопоставить эти адреса ptr, которые отображаются с адресами неосвобожденной памяти.

Как мне заставить valgrind сообщить мне адрес каждого неосвобожденного блока памяти?

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Спасибо Фалаине за код местоположения.

Для valgrind-3.2.3 местоположение, которое у меня работало, было в memcheck / mc_leakcheck.c, функции lc_scan_memory_WRK.

Добавлено это после lc_markstack_push_WRK (addr, clique); на линии № 472

if (clique! = -1) {VG_ (printf) ("clique% d:% p \ n", clique, ptr); }

1 голос
/ 09 октября 2009

К сожалению, программа проверки утечек Memcheck не поддерживает печать адресов. Это связано с тем, что он готов объединить несколько нераспределенных блоков в один «отчет о потерях», если они похожи.

Если вы не возражаете возиться в Memcheck, эту функциональность следует добавить в memcheck / mc_leakcheck.c в исходном коде Valgrind. Я посмотрю на это, когда вернусь домой и опубликую более подробное местоположение.

...