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

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

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

Теперь, когда известно об анализаторах журнальных файлов, очень просто найти утечки памяти в нашей тестовой программе. Для этого достаточно воспользоваться командой

mprleak mpr.log | mprmap -l ./broken
(что эквивалентно
mprmap -l ./broken mpr.log | mprleak
) и в результате обнаружить утечку памяти в строке 20.

$ mprleak mpr.log | mpr map -l ./broken

m:broken(broken.c,20): main(broken.c,47):5:134518624

7.4. Обнаружение ошибок

памяти с помощью Valgrind

Valgrind представляет собой специфический для Intel х86 инструмент, эмулирующий центральный процессор класса х86 для непосредственного наблюдения над всеми обращениями к памяти и анализа потока данных (он может, например, выявлять чтения неинициализированной памяти, тем не менее перенос содержимого неинициализированной ячейки в другую ячейку, которая никогда для читается, как неинициализированное чтение он не трактует). Valgrind обладает множеством других возможностей, включая просмотр использования кэша и поиск состязаний в многопоточных программах. В действительности, в Valgrind имеется универсальное средство для добавления большего количества возможностей, основанных на его эмуляторе центрального процессора. Однако для наших целей мы лишь кратко рассмотрим выполнение с его помощью агрессивного поиска ошибок памяти, что представляет его стандартное поведение.

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

$ valgrind ./broken

==30882== Memcheck, a.k.a. Valgrind, a Memory ERROR detector for x86-linux.

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

==30882== Using valgrind-2.0.0, a program super vision framewok for x86-linux.

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

==30882== Estimated CPU clock rate is 1547 MHz

==30882== For more details, rerun with: -v

==30882==

==30882== Invalid write of size 1

==30882== Недопустимая запись размером 1

==30882== at 0xC030DB: strcpy (mac_replace_strmem.с:174)

==30882== by 0x8048409: broken (broken.с:15)

==30882== by 0x804851F: main (broken.с:47)

==30882== by 0x802BAE: libc_start_main (in /lib/libc-2.3.2.so)

==30882== Address 0x650F029 is 0 bytes after a block of size 5 alloc'd

==30882== at 0xC0C28B: malloc (vg_replace_malloc.с:153)

==30882== by 0x80483F3: broken (broken.с:14)

==30882== by 0x804851F: main (broken.с:47)

==30882== by 0x802BAE: libc_start_main (in /lib/libc-2.3.2.so)

==30882==

==30882== Conditional jump or move depends on uninitialised value(s)

==30882==
Условный переход или перемещение зависит от

неинициализироваиного значения(й)

==30882== at 0x863D8E: __GI_strlen (in /lib/libc-2.3.2.so)

==30882== by 0x83BC31: _IO_printf (in /lib/libc-2.3.2.so)

==30882== by 0x804841C: broken (broken.с:16)

==30882== by 0x804851F: main (broken.с:47)

1: 12345

==30882==

==30882== Invalid write of size 1

==30882== at 0xC030D0: strcpy (mac_replace_.с: 173)

==30882== by 0x804844D: broken (broken.с:21)

==30882== by 0x804851F: main (broken.с:47)

==30882== by 0x802BAE: _libc_start_main (in /lib/libc-2.3.2.so)

==30882== Address 0x650F061 is 0 bytes after a block of size 5 alloc'd

==30882== at 0xC0C28B: malloc (vg_replace_ malloc.с:153)

==30882== by 0x8048437: broken (broken.с:20)

==30882== by 0x804851F: main (broken.с:47)

==30882== by 0x802BAE: libc_start_main (in /lib/libc-2.3.2.so)

==30882==

==30882== Invalid write of size 1

==30882== at 0xC030DB: strcpy (mac_replace_strmem.с:174)

==30882== by 0x804844D: broken (broken.с:21)

==30882== by 0x804851F: main (broken.с:47)

==30882== by 0x802BAE: libc_start_main (in /lib/libc-2.3.2.so)

==30882== Address 0x650F064 is 3 bytes after a block of size 5 alloc'd

==30882== at 0xC0C28B: malloc (vg_replace_malloc.с:153)

==30882== by 0x8048437: broken (broken.с:20)

==30882== by 0x804851F: main (broken.с:47)

==30882== by 0x802BAE: __libc_start_main (in /lib/libc-2.3.2.so)

==30882==

==30882== Invalid read of size 4

==30882== Недопустимое чтение размером 4

==30882== at 0x863D50: __GI_strlen (in /lib/libc-2.3.2.so)

==30882== by 0x83BC31: _IO_printf (in /lib/libc-2.3.2.so)

==30882== by 0x8048460: broken (broken.с:22)

==30882== by 0x804851F: main (broken.с:47)

==30882== Address 0x650F064 is 3 bytes after a block of size 5 alloc'd

==30882== at 0xC0C28B: malloc (vg_replace_malloc.с:153)

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

Черный дембель. Часть 5

Федин Андрей Анатольевич
5. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 5

30 сребреников

Распопов Дмитрий Викторович
1. 30 сребреников
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
30 сребреников

Жребий некроманта 2

Решетов Евгений Валерьевич
2. Жребий некроманта
Фантастика:
боевая фантастика
6.87
рейтинг книги
Жребий некроманта 2

Охота на разведенку

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
6.76
рейтинг книги
Охота на разведенку

Чужбина

Седой Василий
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужбина

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

Надуй щеки! Том 3

Вишневский Сергей Викторович
3. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 3

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Курсант: назад в СССР 9

Дамиров Рафаэль
9. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: назад в СССР 9

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Камень Книга седьмая

Хозяйка дома в «Гиблых Пределах»

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.75
рейтинг книги
Хозяйка дома в «Гиблых Пределах»