15.5.2. Отладчики выделения памяти
15.5.2. Отладчики выделения памяти
Игнорируя такие проблемы, как плохой дизайн программы, для любого крупномасштабного практического приложения единственной сложной задачей программиста на С является управление динамической памятью (посредством malloc(), realloc() и free()).
Этот факт подкреплен большим количеством инструментов, доступных для отладки динамической памяти. Имеется значительное перекрывание того, что предлагают данные утилиты. Например:
• Обнаружение утечек памяти: память, которая выделяется, а затем становится недоступной.
• Обнаружение не освобождаемой памяти: память, которая выделяется, но никогда не освобождается. Не освобождаемая память не всегда является ошибкой, но определение таких случаев дает вам возможность проверить, что с ними все в порядке.
• Обнаружение неправильных освобождений: память, которая освобождается дважды, или функции free() передаются указатели, которые не были получены с помощью malloc().
• Обнаружение использования уже освобожденной памяти: память, которая освобождена, используется через висячий указатель.
• Обнаружение выхода за границы выделенной памяти: получение доступа или сохранение в память за пределами выделенной границы.
• Предупреждение об использовании неинициализированной памяти. (Многие компиляторы могут выдавать такие предупреждения.)
• Динамическая трассировка функций: когда появляется ошибочный доступ к памяти, вы получаете трассировку от того места, где память используется, до того места, где она была выделена.
• Управление инструментами посредством использования переменных окружения.
• Файлы журналов для необработанной отладочной информации, которая может быть обработана позже для создания полезных отчетов.
Некоторые утилиты просто записывают эти события. Другие организуют жуткое завершение программы приложения (посредством SIGSEGV), чтобы на код-нарушитель можно было точно указать из отладчика. Вдобавок, большинство спроектированы для работы вместе с GDB.
Некоторые инструменты требуют изменения исходного кода, такого, как вызов специальных функций или использование особого заголовочного файла, дополнительных #define и статической библиотеки. Другие работают посредством использования специального механизма библиотек общего пользования Linux/Unix для прозрачной установки себя в качестве заместителя стандартных библиотечных версий malloc() и free().
В данном разделе мы рассмотрим три отладчика динамической памяти, а затем предоставим ссылки на несколько других.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Отладчики сценариев JavaScript
Отладчики сценариев JavaScript Отладка представляет собой поиск и устранение ошибок. Часто процесс отладки может занимать большую часть времени разработки всей программы (или сценария). Ведь надежность и безошибочная работа программы зачастую даже важнее ее
15.5.2.5. Другие отладчики malloc
15.5.2.5. Другие отладчики malloc Две статьи Cal Ericson в Linux Journal описывают mtrace и dmalloc, а также большинство других перечисленных ниже инструментов. Эти статьи Memory Leak Detection in Embedded Systems, выпуск 101[184], сентябрь 2002 г., и Memory Leak Detection in C++, выпуск 110[185], июнь 2003 г. Обе статьи доступны на веб-сайте
Какой способ выделения памяти необходимо использовать
Какой способ выделения памяти необходимо использовать Если необходимы смежные страницы физической памяти, то нужно использовать один из низкоуровневых интерфейсов выделения памяти, или функцию kmalloc(). Это стандартный способ выделения памяти в ядре, и, скорее всего, в
Параметры выделения
Параметры выделения Мы знаем множество способов привлечь внимание посетителя к определенным элементам Web-страниц, использовав теги HTML или атрибуты стиля CSS. Но CSS 3 предлагает нам еще один способ сделать это — так называемое выделение.Именно о нем сейчас и пойдет
Параметры выделения
Параметры выделения Мы знаем множество способов привлечь внимание посетителя к определенным элементам Web-страниц, использовав теги HTML или атрибуты стиля CSS. Но CSS 3 предлагает нам еще один способ сделать это — так называемое выделение.Именно о нем сейчас и пойдет
Инструменты выделения
Инструменты выделения Программа Photoshop предлагает несколько инструментов для выделения изображения.Начнем с самого простого, то есть с инструмента Прямоугольная область. При выборе этого инструмента указатель мыши принимает вид перекрестья. В первую очередь необходимо
Выделения
Выделения Типографика предусматривает несколько вариантов выделений в тексте. Для каких-либо слов или фрагментов текста мы можем использовать различные начертания гарнитуры, изменение расстояния между символами и т. д. Однако не все виды выделения, которые вы сможете
60. Избегайте выделения и освобождения памяти в разных модулях
60. Избегайте выделения и освобождения памяти в разных модулях РезюмеЗолотое правило программиста — положи, где взял. Выделение памяти в одном модуле, а освобождение в другом делает программу более хрупкой, создавая тонкую дальнюю зависимость между этими модулями. Такие
Инструменты выделения
Инструменты выделения Ключевым моментом в работе над монтажом изображения является порядок и способ выделения контуров определенных силуэтов или иных элементов изображения. Прежде чем, например, копировать ту или иную часть изображения, мы прежде всего должны
Трансформации выделения
Трансформации выделения Как правило, бывает полезно доработать форму выделения региона уже после применения инструментов выделения. С этой целью мы можем воспользоваться специальном набором опций, который называется Transform Selection (Трансформировать выделение). Они
Понятие выделения
Понятие выделения Создавая выделение, мы обозначаем в документе область, с которой хотим работать, а вся остальная часть документа для редактирования становится недоступной. Это правило справедливо для всех случаев, когда мы работаем с инструментами и командами
Редактирование выделения
Редактирование выделения Как правило, созданное выделение не идеально и содержит ошибки, что делает невозможным использовать его для работы, которая требует точности и высокого качества. Поэтому важно знать арсенал средств для редактирования выделения и уметь
Сохранение и загрузка выделения
Сохранение и загрузка выделения Как уже было сказано, качественное выделение можно получить, только работая над ним вручную и устраняя все мелкие недочеты, которые остаются после создания выделения на основе изображения. Разумеется, создать выделение в виде круга или
3.5. Ограничения выделения разделов
3.5. Ограничения выделения разделов Этот раздел обсуждает текущие ограничения поддержки выделения разделов MySQL:Начиная с MySQL 5.1.12, следующие конструкции не разрешаются в выражениях выделения разделов:Вложенные обращения к функциям (то есть, конструкции типа
1.1.3. Синтаксические выделения
1.1.3. Синтаксические выделения Помимо форматирования программного кода Emacs упрощает чтение файлов, написанных на C/C++, выделяя цветом различные синтаксические элементы. Например, ключевые слова могут быть выделены одним цветом, названия встроенных типов данных — другим, а
2.2.4. Ошибки выделения ресурсов
2.2.4. Ошибки выделения ресурсов Обычно при неудачном выполнении системного вызова наиболее приемлемое решение — отменить текущую операцию, но не завершить программу, так как можно восстановить ее нормальную работу. Один из способов сделать это — выйти из текущей