Шрифт:
Это значение типа
Этот макрос заключает в оболочку вызов
Этот макрос выталкивает из стека один уровень сохраненного состояния отладки, созданный макросом
Этот макрос заключает в оболочку вызов
В другом воплощении, в первой начинающей компании, для которой мы работали [177] , мы использовали в своем продукте библиотеку
177
Хотя нам следовало бы усвоить свой урок после первой компании, мы перешли ко второй. С тех пор, как мы это выяснили, мы обычно избегаем начинающие компании. Ваша выгода, конечно, может меняться — Примеч. автора.
Чтобы извлечь максимальную выгоду от библиотеки
Мы нашли, что библиотека
15.5.2. Отладчики выделения памяти
Игнорируя такие проблемы, как плохой дизайн программы, для любого крупномасштабного практического приложения единственной сложной задачей программиста на С является управление динамической памятью (посредством
Этот факт подкреплен большим количеством инструментов, доступных для отладки динамической памяти. Имеется значительное перекрывание того, что предлагают данные утилиты. Например:
• Обнаружение утечек памяти: память, которая выделяется, а затем становится недоступной.
• Обнаружение не освобождаемой памяти: память, которая выделяется, но никогда не освобождается. Не освобождаемая память не всегда является ошибкой, но определение таких случаев дает вам возможность проверить, что с ними все в порядке.
• Обнаружение неправильных освобождений: память, которая освобождается дважды, или функции
• Обнаружение использования уже освобожденной памяти: память, которая освобождена, используется через висячий указатель.
• Обнаружение выхода за границы выделенной памяти: получение доступа или сохранение в память за пределами выделенной границы.
• Предупреждение об использовании неинициализированной памяти. (Многие компиляторы могут выдавать такие предупреждения.)
• Динамическая трассировка функций: когда появляется ошибочный доступ к памяти, вы получаете трассировку от того места, где память используется, до того места, где она была выделена.
• Управление инструментами посредством использования переменных окружения.
• Файлы журналов для необработанной отладочной информации, которая может быть обработана позже для создания полезных отчетов.
Некоторые утилиты просто записывают эти события. Другие организуют жуткое завершение программы приложения (посредством
Некоторые инструменты требуют изменения исходного кода, такого, как вызов специальных функций или использование особого заголовочного файла, дополнительных