Linux программирование в примерах
Шрифт:
Записывает сообщения в
файл.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
(Были
Опция
– 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
. При вызове без опций
ch15-badmem1.c
выделяет и использует память, но не освобождает ее. О таком случае сообщает опция —leak-check=yes
:
$ valgrind --leak-check=yes ch15-badmem1
1 ==8720== Memcheck, a.k.a. Valgrind, a memory error detector for x86-linux.
...
8 p = <not 30 bytes>
9 ==8720==
10 ==8720== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Поделиться:
Популярные книги
Сильнейший ученик. Том 1
1. Пробуждение крови
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Два лика Ирэн
Любовные романы:
любовно-фантастические романы
6.08
рейтинг книги
Сыночек в награду. Подари мне любовь
1. Суровые отцы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Игра топа
1. Игра топа
Фантастика:
фэнтези
6.86
рейтинг книги
Генерал Скала и ученица
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Огненный князь 2
2. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ты не мой Boy 2
6. Самбисты
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
На руинах Мальрока
2. Девятый
Фантастика:
боевая фантастика
9.02
рейтинг книги
Сфирот
8. Стеллар
Фантастика:
боевая фантастика
рпг
6.92
рейтинг книги
Газлайтер. Том 9
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Школа. Первый пояс
2. Путь
Фантастика:
фэнтези
7.67
рейтинг книги
Последний попаданец 12: финал часть 2
12. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Я тебя не отпускал
2. Черкасовы-Ольховские
Любовные романы:
современные любовные романы
6.55