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

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

Жанры

Linux программирование в примерах

Роббинс Арнольд

Шрифт:

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

– -gdb-attach=no/yes

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

no
.

– -help

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

– -logfile=файл

Записывает сообщения в

файл.pid
.

– -num-callers=число

Выводит число

вызывающих в трассировке стека. По умолчанию 4.

– -skin=оболочка

Использует соответствующую оболочку. По умолчанию

memcheck
.

– -trace-children=no|yes

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

no
.

– V
,
– -verbose

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

Из опций для оболочки

memcheck
мы полагаем, что эти являются наиболее полезными.

– -leak-check=no|yes

Искать утечки памяти после завершения программы. По умолчанию используется

no
.

– -show-reachable=no|yes

Показать доступные блоки после завершения программы. Если используется

– -show-reachable=yes
, Valgrind ищет динамически выделенную память, на которую все еще есть указывающий на нее указатель. Такая память не является утечкой, но о ней все равно следует знать. По умолчанию используется
no
.

Давайте посмотрим на Valgrind в действии. Помните

ch15-badmem.c
? (См. раздел 15.5.2.2 «Electric Fence».) Опция
– b
записывает в память, находящуюся вне выделенного
malloc
блока. Вот что сообщает Valgrind:

$ valgrind ch15-badmem1 -b

1 ==8716== Memcheck, a.k.a. Valgrind, a memory error detector for x86-linux.

2 ==8716== Copyright (C) 2002-2003, and GNU GPL'd, by Julian Seward.

3 ==8716== Using valgrind-20030725, a program supervision framework for x86-linux.

4 ==8716== Copyright (C) 2000-2003, and GNU GPL'd, by Julian Seward.

5 ==8716== Estimated CPU clock rate is 2400 MHz

6 ==8716== For more details, rerun with: -v

7 ==8716==

8 p = <not 30 bytes>

9 ==8716== Invalid write of size 1

10 ==8716== at 0x8048466: main (ch15-badmem1.c:18)

11 ==8716== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

12 ==8716== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

13 ==8716== Address 0x4104804E is 12 bytes after a block of size 30 alloc'd

14 ==8716== at 0x40025488: malloc (vg_replace_malloc.с:153)

15 ==8716== by 0x8048411: main (ch15-badmem1.c:11)

16 ==8716== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

17 ==8716== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

18 ==8716==

19 ==8716== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

20 ==8716== malloc/free: in use at exit: 30 bytes in 1 blocks.

21 ==8716== malloc/free: 1 allocs, 0 frees, 30 bytes allocated.

22 ==8716== For a detailed leak analysis, rerun with: --leak-check=yes

23 ==8716== For counts of detected errors, rerun with: -v

(Были

добавлены номера строк в выводе, чтобы облегчить обсуждение.) Строка 8 является выводом программы; остальные от Valgrind в стандартную ошибку. Сообщение об ошибке находится в строках 9–17. Она указывает, сколько байтов было записано неверно (строка 9), где это случилось (строка 10), и показывает трассировку стека. Строки 13–17 описывают, откуда была выделена память. Строки 19–23 подводят итоги.

Опция

– f
программы
ch15-badmem1
освобождает выделенную память, а затем записывает в нее через висячий указатель. Вот что сообщает Valgrind в этом случае:

$ valgrind ch15-badmem1 -f

==8719== Memcheck, a.k.a. Valgrind, a memory error detector for x86-linux.

...

p = <not 30 bytes>

==8719== Invalid write of size 1

==8719== at 0x8048498: main (ch15-badmem1.с:21)

==8719== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

==8719== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

==8719== Address 0x41048024 is 0 bytes inside a block of size 30 free'd

==8719== at 0x40025722: free (vg_replace_malloc.с:220)

==8719== by 0x8048491: main (ch15-badmem1.c:20)

==8719== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

==8719== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

...

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

free
находится в строке 20
ch15-badmem1.c
.

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

Набирая силу

Каменистый Артем
2. Альфа-ноль
Фантастика:
фэнтези
боевая фантастика
рпг
6.29
рейтинг книги
Набирая силу

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11

Польская партия

Ланцов Михаил Алексеевич
3. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Польская партия

Восьмое правило дворянина

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

Ты предал нашу семью

Рей Полина
2. Предатели
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты предал нашу семью

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Наследник старого рода

Шелег Дмитрий Витальевич
1. Живой лёд
Фантастика:
фэнтези
8.19
рейтинг книги
Наследник старого рода

Возвращение Низвергнутого

Михайлов Дем Алексеевич
5. Изгой
Фантастика:
фэнтези
9.40
рейтинг книги
Возвращение Низвергнутого

Лорд Системы

Токсик Саша
1. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
4.00
рейтинг книги
Лорд Системы

Довлатов. Сонный лекарь 2

Голд Джон
2. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь 2

Дурашка в столичной академии

Свободина Виктория
Фантастика:
фэнтези
7.80
рейтинг книги
Дурашка в столичной академии

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

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

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Удобная жена

Волкова Виктория Борисовна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Удобная жена