Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
15.5.2.5. Другие отладчики malloc
Две статьи Cal Ericson в Linux Journal описывают
mtracedmallocДругие инструменты сходны по природе с описанными ранее.
ccmallocЗамещающая
malloc()http://www.inf.ethz.ch/personal/biere/projects/ccmallocmallocСтаринная, но полнофункциональная библиотека замещения
malloc()ftp://ftp.cs.toronto.edu/pub/moraes/malloc-1.18.tar.gzmpatrolПакет с большими возможностями настройки для отладки памяти и тестирования. См
http://www.cbmamiga.demon.со.uk/mpatrolmemwatchПакет, требующий использования специального заголовочного файла и опций времени компилирования. См.
http://www.linkdata.se/sourcecode.htmlnjamd«Не просто еще один отладчик malloc» (Not Just Another Malloc Debugger). Эта библиотека не требует специальной компоновки с приложением; вместо этого она использует
LD_PRELOADhttp://sourceforge.net/projects/njamdyamdПохож на Electric Fence, но со многими дополнительными опциями. См.
http://www3.hmc.edu/~neldredge/yamdПочти все из этих пакетов используют для точной настройки своего поведения переменные окружения. В таблице 15.1 на основе статей из Linux Journal сделана сводка различных пакетов.
Таблица 15.1. Сводка особенностей инструментов памяти
| Инструмент | ОС | Заголовочный файл | Модуль/ программа | Многопоточность |
|---|---|---|---|---|
ccmalloc | Многотипная | Нет | Программа | Нет |
dmalloc | Многотипная | Необязательно | Программа | Да |
efence | Многотипная | Нет | Программа | Нет |
memwatch | Многотипная | Да | Программа | Нет |
Moraes | Многотипная | Необязательно | Программа | Нет |
mpatrol | Многотипная | Нет | Программа | Да |
mtrace | Linux (GLIBC) | Да | Модуль | Нет |
njamd | Многотипная | Нет | Программа | Нет |
valgrind | Linux (GLIBC) | Нет | Программа | Да |
yamd | Linux, DJGPP | Нет | Программа | Нет |
Как видно, для отладки проблем динамической памяти доступен ряд выборов. На системах GNU/Linux и BSD один или более из этих инструментов, возможно, уже установлены, что избавляет вас от хлопот по их загрузке и построению.
Полезно также использовать для своей программы несколько инструментов подряд. Например,
mtrace15.5.3. Современная
lintВ оригинальном С компилятор не мог проверить, соответствуют ли параметры, переданные в вызове функции, списку параметров в определении функции; прототипов не было. Это часто вело к неуловимым ошибкам, поскольку ошибочный вызов функции мог вызывать лишь частично ошибочные результаты, которые проходили незамеченными во время тестирования, или мог даже вообще не появиться во время тестирования. Например:
if (argc < 2) fprintf ("usage: %s [ options ] filesn", argv[0]); /* отсутствует stderr */Если программа, содержащая этот фрагмент, никогда не вызывается с ошибочным числом аргументов,
fprintf()FILE*Программа V7
lintlintС появлением в стандартном С прототипов необходимость в
lintextern int some_func(); /* Список аргументов неизвестен */
