15.5.2. Отладчики выделения памяти

15.5.2. Отладчики выделения памяти

Игнорируя такие проблемы, как плохой дизайн программы, для любого крупномасштабного практического приложения единственной сложной задачей программиста на С является управление динамической памятью (посредством malloc(), realloc() и free()).

Этот факт подкреплен большим количеством инструментов, доступных для отладки динамической памяти. Имеется значительное перекрывание того, что предлагают данные утилиты. Например:

• Обнаружение утечек памяти: память, которая выделяется, а затем становится недоступной.

• Обнаружение не освобождаемой памяти: память, которая выделяется, но никогда не освобождается. Не освобождаемая память не всегда является ошибкой, но определение таких случаев дает вам возможность проверить, что с ними все в порядке.

• Обнаружение неправильных освобождений: память, которая освобождается дважды, или функции free() передаются указатели, которые не были получены с помощью malloc().

• Обнаружение использования уже освобожденной памяти: память, которая освобождена, используется через висячий указатель.

• Обнаружение выхода за границы выделенной памяти: получение доступа или сохранение в память за пределами выделенной границы.

• Предупреждение об использовании неинициализированной памяти. (Многие компиляторы могут выдавать такие предупреждения.)

• Динамическая трассировка функций: когда появляется ошибочный доступ к памяти, вы получаете трассировку от того места, где память используется, до того места, где она была выделена.

• Управление инструментами посредством использования переменных окружения.

• Файлы журналов для необработанной отладочной информации, которая может быть обработана позже для создания полезных отчетов.

Некоторые утилиты просто записывают эти события. Другие организуют жуткое завершение программы приложения (посредством SIGSEGV), чтобы на код-нарушитель можно было точно указать из отладчика. Вдобавок, большинство спроектированы для работы вместе с GDB.

Некоторые инструменты требуют изменения исходного кода, такого, как вызов специальных функций или использование особого заголовочного файла, дополнительных #define и статической библиотеки. Другие работают посредством использования специального механизма библиотек общего пользования Linux/Unix для прозрачной установки себя в качестве заместителя стандартных библиотечных версий malloc() и free().

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Инструменты выделения

Из книги Photoshop. Мультимедийный курс автора Мединов Олег

Инструменты выделения Программа Photoshop предлагает несколько инструментов для выделения изображения.Начнем с самого простого, то есть с инструмента Прямоугольная область. При выборе этого инструмента указатель мыши принимает вид перекрестья. В первую очередь необходимо


Понятие выделения

Из книги Adobe Photoshop CS3 автора Завгородний Владимир

Понятие выделения Создавая выделение, мы обозначаем в документе область, с которой хотим работать, а вся остальная часть документа для редактирования становится недоступной. Это правило справедливо для всех случаев, когда мы работаем с инструментами и командами


Редактирование выделения

Из книги Adobe InDesign CS3 автора Завгородний Владимир

Редактирование выделения Как правило, созданное выделение не идеально и содержит ошибки, что делает невозможным использовать его для работы, которая требует точности и высокого качества. Поэтому важно знать арсенал средств для редактирования выделения и уметь


Сохранение и загрузка выделения

Из книги Photoshop CS3: Обучающий курс автора Тимофеев Сергей Михайлович

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


Выделения

Из книги MySQL: руководство профессионала автора Паутов Алексей В

Выделения Типографика предусматривает несколько вариантов выделений в тексте. Для каких-либо слов или фрагментов текста мы можем использовать различные начертания гарнитуры, изменение расстояния между символами и т. д. Однако не все виды выделения, которые вы сможете


Инструменты выделения

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

Инструменты выделения Ключевым моментом в работе над монтажом изображения является порядок и способ выделения контуров определенных силуэтов или иных элементов изображения. Прежде чем, например, копировать ту или иную часть изображения, мы прежде всего должны


Трансформации выделения

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

Трансформации выделения Как правило, бывает полезно доработать форму выделения региона уже после применения инструментов выделения. С этой целью мы можем воспользоваться специальном набором опций, который называется Transform Selection (Трансформировать выделение). Они


3.5. Ограничения выделения разделов

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

3.5. Ограничения выделения разделов Этот раздел обсуждает текущие ограничения поддержки выделения разделов MySQL:Начиная с MySQL 5.1.12, следующие конструкции не разрешаются в выражениях выделения разделов:Вложенные обращения к функциям (то есть, конструкции типа


60. Избегайте выделения и освобождения памяти в разных модулях

Из книги Linux программирование в примерах автора Роббинс Арнольд

60. Избегайте выделения и освобождения памяти в разных модулях РезюмеЗолотое правило программиста — положи, где взял. Выделение памяти в одном модуле, а освобождение в другом делает программу более хрупкой, создавая тонкую дальнюю зависимость между этими модулями. Такие


Параметры выделения

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Параметры выделения Мы знаем множество способов привлечь внимание посетителя к определенным элементам Web-страниц, использовав теги HTML или атрибуты стиля CSS. Но CSS 3 предлагает нам еще один способ сделать это — так называемое выделение.Именно о нем сейчас и пойдет


Параметры выделения

Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь

Параметры выделения Мы знаем множество способов привлечь внимание посетителя к определенным элементам Web-страниц, использовав теги HTML или атрибуты стиля CSS. Но CSS 3 предлагает нам еще один способ сделать это — так называемое выделение.Именно о нем сейчас и пойдет


15.5.2.5. Другие отладчики malloc

Из книги Разработка ядра Linux автора Лав Роберт

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 г. Обе статьи доступны на веб-сайте


1.1.3. Синтаксические выделения

Из книги автора

1.1.3. Синтаксические выделения Помимо форматирования программного кода Emacs упрощает чтение файлов, написанных на C/C++, выделяя цветом различные синтаксические элементы. Например, ключевые слова могут быть выделены одним цветом, названия встроенных типов данных — другим, а


2.2.4. Ошибки выделения ресурсов

Из книги автора

2.2.4. Ошибки выделения ресурсов Обычно при неудачном выполнении системного вызова наиболее приемлемое решение — отменить текущую операцию, но не завершить программу, так как можно восстановить ее нормальную работу. Один из способов сделать это — выйти из текущей


Отладчики сценариев JavaScript

Из книги автора

Отладчики сценариев JavaScript Отладка представляет собой поиск и устранение ошибок. Часто процесс отладки может занимать большую часть времени разработки всей программы (или сценария). Ведь надежность и безошибочная работа программы зачастую даже важнее ее


Какой способ выделения памяти необходимо использовать

Из книги автора

Какой способ выделения памяти необходимо использовать Если необходимы смежные страницы физической памяти, то нужно использовать один из низкоуровневых интерфейсов выделения памяти, или функцию kmalloc(). Это стандартный способ выделения памяти в ядре, и, скорее всего, в