Как вы получаете Valgrind, чтобы показать ошибки линии? - PullRequest
5 голосов
/ 17 октября 2011

Как вы получаете Valgrind, чтобы точно показать, где произошла ошибка? Я скомпилировал свою программу (на компьютере с Windows через терминал Linux через PuTTy) и добавил опцию -g debug.

Когда я запускаю Valgrind, я получаю сводку Leak and Heap, и я определенно потерял память, но никогда не получаю информацию о том, где это происходит (имя файла, строка). Разве Вальгринд не должен указывать мне, по какой строке после того, как я выделю память, она не может быть освобождена позже?

==15746==
==15746== HEAP SUMMARY:
==15746==     in use at exit: 54 bytes in 6 blocks
==15746==   total heap usage: 295 allocs, 289 frees, 11,029 bytes allocated
==15746==
==15746== LEAK SUMMARY:
==15746==    definitely lost: 12 bytes in 3 blocks
==15746==    indirectly lost: 42 bytes in 3 blocks
==15746==      possibly lost: 0 bytes in 0 blocks
==15746==    still reachable: 0 bytes in 0 blocks
==15746==         suppressed: 0 bytes in 0 blocks
==15746== Rerun with --leak-check=full to see details of leaked memory
==15746==
==15746== For counts of detected and suppressed errors, rerun with: -v
==15746== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 8)

Ответы [ 3 ]

10 голосов
/ 04 ноября 2011

Я неоднократно упоминал об этом и не мог понять, почему «--leak-check = full» не работает для меня, поэтому я решил добавить комментарий tune2fs.

Наиболее вероятная проблема заключается в том, что вы (не ShrimpCrackers, но тот, кто читает этот пост прямо сейчас) поместили --leak-check = full в конце вашей командной строки.Valgrind хотел бы, чтобы вы установили флаг перед тем, как вводить фактическую командную строку для запуска вашей программы.

т.е.:

valgrind --leak-check=full ./myprogram

NOT:

valgrind ./myprogram --leak-check=full
4 голосов
/ 05 марта 2013

Позвольте мне быть более конкретным для других читателей (у меня была та же проблема, но мои аргументы были в правильном порядке): Я обнаружил, что valgrind нужен путь к исполняемому файлу, если вы не дадите его, он запустится, но не выдаст номера строк. В моем случае исполняемый файл находился в другом каталоге, который был в моем PATH, но чтобы получить информацию о строке, вы должны запустить

valgrind --leak-check=full path_to_myprogram/myprogram
4 голосов
/ 17 октября 2011

Попробуйте valgrind --leak-check=full

Это обычно печатает больше полезной информации. Также добавьте флаг -O0 при компиляции, чтобы ваш код не был оптимизирован.

...