Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах
Шрифт:

log-non-free (lnf) -- log non-freed pointers (0x2)

log-known (lkn) -- log only known non-freed (0x4)

log-trans (ltr) -- log memory transactions (0x8)

log-admin (lad) -- log administrative info (0x20)

log-blocks (lbl) -- log blocks when heap-map (0x40)

log-bad-space (lbs) -- dump space from bad pnt (0x100)

log-nonfree-space (lns) -- dump space from non-freed pointers (0x200)

log-elapsed-time (let) -- log elapsed-time for allocated pointer (0x40000)

log-current-time (let) -- log current-time for allocated pointer (0x80000)

check-fence (cfe) -- check fence-post errors (0x400)

check-heap (che) -- check heap adm structs (0x800)

check-lists (cli) -- check free lists (0x1000)

check-blank (cbl) -- check mem overwritten by alloc-blank, free-blank (0x2000)

check-funcs (cfu) -- check functions (0x4000)

force-linear (fli) -- force heap space to be linear (0x10000)

catch-signals (csi) -- shutdown program on SIGHUP, SIGINT, SIGTERM (0x20000)

realloc-copy (rco) -- copy all re-allocations (0x100000)

free-blank (fbl) -- overwrite freed memory space with BLANK_CHAR (0x200000)

error-abort (eab) -- abort immediately on error (0x400000)

alloc-blank (abl) -- overwrite newly alloced memory with BLANK_CHAR (0x800000)

heap-check-map (hem) -- log heap-map on heap-check (0x1000000)

print-messages (pme) -- write messages to stderr (0x2000000)

catch-null (cnu) -- abort if no memory available (0x4000000)

never-reuse (nre) -- never re-use freed memory (0x8000000)

allow-free-null (afn) -- allow the frees of NULL pointers (0x20000000)

error-dump (edu) -- dump core on error and then continue (0x40000000)

К этому времени у вас должно быть ощущение того, как использовать

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

15.5.2.4. Valgrind: многосторонний инструмент

Инструменты, описанные в предыдущем разделе, все фокусируются на отладке динамической памяти, и это в самом деле является значительной проблемной областью для многих программ. Однако, проблемы динамической памяти не являются единственной разновидностью. Программа Valgrind под лицензией GPL охватывает большое разнообразие проблем, включая те, которые происходят от динамической памяти.

Руководство по Valgrind описывает программу также или лучше, чем можем мы, поэтому мы будем цитировать (и сокращать) его по мере продвижения вперед.

Valgrind является гибким инструментом для отладки и профилирования исполняемых файлов Linux-x86. Инструмент состоит из ядра, которое программно обеспечивает искусственный процессор x86, и ряда «оболочек», каждая из которых является отладочным или профилирующим инструментом. Архитектура модульная, так что можно легко создавать новые «оболочки», не нарушая существующую структуру.

Наиболее полезной «оболочкой» является

memcheck
.

«Оболочка»

memcheck
обнаруживает в ваших программах проблемы с управлением памятью. Проверяются все чтения и записи памяти, а вызовы
malloc/new/free/delete
перехватываются. В результате
memcheck
может обнаружить следующие проблемы

• Использование неинициализированной памяти.

• Чтение/запись в память после ее освобождения.

• Чтение/запись за границей выделенного

malloc
блока.

• Чтение/запись в ненадлежащие области стека.

• Утечки памяти, когда указатели на выделенные

malloc
теряются навсегда.

• Несоответствующее использование

malloc/new/new[]
против
free/delete/delete[]
.

• Некоторые неправильные употребления

pthreads
API POSIX.

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

Другие «оболочки» более специализированы:

• 

cachegrind
осуществляет обстоятельную имитацию кэшей I1, D1 и L2 процессора, поэтому может точно указать источники осечек кэшей в вашем коде.

• 

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

Но положительная сторона значительна: программы работают почти в два раза быстрее, чем с

memcheck
, используя значительно меньше памяти. Утилита по-прежнему находит чтения/записи освобожденной памяти, памяти за пределами выделенных блоков и в других недействительных местах, ошибки, которые вы действительно хотите обнаружить до выпуска программы в свет!

• 

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

Наконец, руководство отмечает:

Valgrind тесно связан с особенностями процессора, операционной системы и, в меньшей степени, компилятора и основных библиотек С. Это затрудняет его переносимость, поэтому мы с самого начала сконцентрировались на том, что мы считаем широко использующейся платформой: Linux на x86. Valgrind использует стандартный механизм Unix '

./configure
', '
make
', '
make install
', и мы попытались обеспечить его работу на машинах с ядром 2.2 или 2.4 и glibc 2.1.X, 2.2.X или 2.3.1. Это должно охватить значительное большинство современных установок Linux. Обратите внимание, что glibc-2.3.2+ с пакетом NPTL (Native POSIX Thread Library — собственная библиотека потоков POSIX) не будет работать. Мы надеемся исправить это, но это будет нелегко.

Если вы используете GNU/Linux на другой платформе или используете коммерческую систему Unix, Valgrind не окажет вам большой помощи. Однако, поскольку системы GNU/Linux на x86 довольно обычны (и вполне доступны), вполне вероятно, что вы сможете приобрести ее с умеренным бюджетом, или по крайней мере, занять на время! Что еще, когда Valgrind нашел для вас проблему, она исправляется для любой платформы, для которой компилируется ваша программа. Таким образом, разумно использовать систему x86 GNU/Linux для разработки, а какую-нибудь другую коммерческую систему Unix для развертывания высококачественного продукта. [181]

181

Все в большей степени для разработки высококачественных продуктов используется также GNU/Linux! — Примеч. автора.

Хотя из руководства Valgrind у вас могло сложиться впечатление, что существуют отдельные команды

memcheck
,
addrcheck
и т.д., это не так. Вместо этого программа оболочки драйвера с именем
valgrind
запускает отладочное ядро с соответствующей «оболочкой», указанной в опции
– -skin=
. Оболочкой по умолчанию является
memcheck
; таким образом, запуск просто
valgrind
равносильно '
valgrind --skin=memcheck
' (Это обеспечивает совместимость с более ранними версиями Valgrind, которые осуществляли лишь проверку памяти, это имеет также больший смысл, поскольку оболочка
memcheck
предоставляет большую часть сведений.)

Valgrind предусматривает ряд опций. За всеми подробностями мы отсылаем вас к его документации. Опции поделены на две группы; из тех, которые используются с ядром (т. е. работают для всех оболочек), наиболее полезными могут быть следующие:

– -gdb-attach=no/yes

Запускается с подключенным к процессу GDB для интерактивной отладки. По умолчанию используется

no
.

– -help

Перечисляет опции.

– -logfile=файл

Поделиться:
Популярные книги

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Солдат Империи

Земляной Андрей Борисович
1. Страж
Фантастика:
попаданцы
альтернативная история
6.67
рейтинг книги
Солдат Империи

Тринадцатый IV

NikL
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Тринадцатый IV

Глава рода

Шелег Дмитрий Витальевич
5. Живой лёд
Фантастика:
боевая фантастика
6.55
рейтинг книги
Глава рода

Старый, но крепкий 8

Крынов Макс
8. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Старый, но крепкий 8

Приказано выжить!

Малыгин Владимир
1. Другая Русь
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.09
рейтинг книги
Приказано выжить!

Менталист. Конфронтация

Еслер Андрей
2. Выиграть у времени
Фантастика:
боевая фантастика
6.90
рейтинг книги
Менталист. Конфронтация

Рассвет русского царства 3

Грехов Тимофей
3. Новая Русь
Фантастика:
историческое фэнтези
альтернативная история
5.00
рейтинг книги
Рассвет русского царства 3

Газлайтер. Том 27

Володин Григорий Григорьевич
27. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 27

Уникум

Поселягин Владимир Геннадьевич
1. Уникум
Фантастика:
альтернативная история
4.60
рейтинг книги
Уникум

Каратила

Поповский Андрей Владимирович
Детективы:
боевики
6.50
рейтинг книги
Каратила

Моров. Том 1 и Том 2

Кощеев Владимир
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров. Том 1 и Том 2

Кодекс Охотника. Книга VIII

Винокуров Юрий
8. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VIII

Рубежник

Билик Дмитрий Александрович
1. Бедовый
Фантастика:
юмористическая фантастика
городское фэнтези
мистика
5.00
рейтинг книги
Рубежник