Какую стратегию вы используете при отслеживании проблем, связанных с памятью? Какие инструменты вы используете (с открытым исходным кодом и проприетарные) для выявления утечек памяти, повреждения памяти и т. Д.? Как бы вы отслеживали утечки памяти, если бы в системе был только gdb / dbx?
Для меня исправление утечек памяти только с помощью отладчика очень сложно.
debugging
memory-leaks
Hemant
источник
источник
Ответы:
Если вы можете изменить исходный код, Dmalloc отлично подходит; в нем будет указан список указателей, которые были освобождены, и (для кода, созданного с помощью символов отладки), в какой именно строке они были размещены.
Если вы не можете, Valgrind в значительной степени стандарт для такого рода вещей. Я обычно нахожу Valgrind несколько сложнее в использовании, но он имеет гораздо больше возможностей и не требует добавления вызовов dmalloc в ваш код
источник
Валгринд удивительно полезен.
источник
Массив (из Valgrind) является одним из лучших способов обнаружения утечек памяти. Повторите ваш подозрительный код (или запустите программу достаточно долго) и выведите результат с помощью ms_print. Обычно стек вызовов дает вам достаточно информации, чтобы исправить это.
С помощью GDB вы можете попытаться подключиться к работающей программе и вызвать такие функции, как
malloc_stats()
Если ваша программа написана на другом языке, это может быть сложнее. Недавно некоторые GDB получили возможность написания сценариев, и люди начали интересные проекты, такие как gdb-heap , которые могут анализировать память Python из дампа ядра. Подобные сценарии анализа памяти могут быть возможны для объектов C ++.
Читайте также /programming/2564752/examining-cc-heap-memory-statistics-in-gdb
источник
Для Solaris есть несколько инструментов, перечисленных в ответах на этот вопрос StackOverflow (они включают проверку на утечку с другими формами плохого доступа к памяти).
источник
Я некоторое время делал Objective-C, и есть анализатор, который занимается управлением памятью на уровне C и тому подобными вещами. Clang Static Analyzer настолько хорош, что Apple решила связать его со своей IDE xCode. Я не уверен, что это хорошо для вашего вопроса, но если вы делаете C, то стоит попробовать.
источник