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

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

Жанры

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

Electric Fence 2.2.0 Copyright (С) 1987-1999 Bruce Perens <bruce@perens.com>

p = <not 30 bytes>

/usr/bin/ef: line 20: 28007 Segmentation fault (core dumped)

( export LD_PRELOAD=libefence.so.0.0; exec $* )

$ ls -l core* /* Linux создает для нас разные файлы core */

– rw------- 1 arnold devel 217088 Aug 28 15:40 core.28005

– rw------- 1 arnold devel 212992 Aug 28 15:40 core.28007

GNU/Linux создает файлы

core
, которые включают в свое имя ID процесса. В данном случае такое поведение полезно, поскольку мы можем отдельно отлаживать каждый файл
core
:

$ gdb ch15-badmem1 core.28005 /* От опции -b */

GNU gdb 5.3

...

Core was generated by 'ch15-badmem1 -b'.

Program terminated with signal 11, Segmentation fault.

...

#0 0x08048466 in main (argc=2, argv=0xbffff8c4) at ch15-badmem1.c:18

18 p[42] = 'a'; /* touch outside the bounds */

(gdb) quit

$ gdb ch15-badmem1 core.28007 /* От опции -f */

GNU gdb 5.3

...

Core was generated by 'ch15-badmem1 -f'.

Program terminated with signal 11, Segmentation fault.

...

#0 0x08048498 in main (argc=2, argv=0xbffff8c4) at ch15-badmem1.с:21

21 p[0] = 'b';

Справочная страница efence(3) описывает несколько переменных окружения, которые должны быть установлены, чтобы настроить поведение Electric Fence. Следующие три наиболее примечательны.

EF_PROTECT_BELOW

Установка этой переменной в 1 заставляет Electric Fence проверять «недоборы» (underruns) вместо «переборов» (overruns) при выходе за пределы отведенной памяти. «Перебор», т.е. доступ к памяти в области за выделенной, был продемонстрирован ранее. «Недобор» является доступом к памяти, расположенной перед выделенной областью памяти.

EF_PROTECT_FREE

Установка этой переменной в 1 предотвращает повторное использование Electric Fence памяти, которая была корректно освобождена. Это полезно, когда вы думаете, что программа может получать доступ к освобожденной памяти; если освобожденная память впоследствии была выделена заново, доступ к ней через предыдущий висячий указатель остался бы в противном случае незамеченным.

EF_ALLOW_MALLOC_0

При наличии ненулевого значения Electric Fence допускает вызовы '

malloc(0)
'. Такие вызовы в стандартном С технически действительны, но могут представлять программную ошибку. Соответственно Electric Fence по умолчанию их запрещает.

Вдобавок к переменным окружения Electric Fence предоставляет глобальные переменные с такими же названиями. Вы можете изменить их значения из отладчика, так что можно динамически изменять поведение программы, которая уже начала выполнение. Подробности см. в efence(3).

15.5.2.3. Отладка Malloc:

dmalloc

Библиотека

dmalloc
предоставляет большое число опций отладки. Ее автором является Грей Ватсон (Gray Watson), есть также и свой веб-сайт. [180] Как и в случае с Electric Fence, она может быть уже установленной на вашей системе, или же вы можете ее извлечь и построить самостоятельно.

180

http://www.dmalloc.com
Примеч. автора.

Библиотека

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

$ echo $DMALLOC_OPTIONS

debug=0x4e40503,inter=100,log=dm-log

Компонент '

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

Первый шаг заключается в определении функции оболочки с названием

dmalloc
, которая вызывает программу драйвера
dmalloc
:

$ dmalloc {

> eval 'command dmalloc -b $*' /* Команда 'command' обходит функции оболочки */

> }

После того, как это сделано, вы можете передать функции опции для установки файла журнала (-1), указать число итераций, после которых

dmalloc
должна проверить свои внутренние структуры данных (-1), и указать уровень отладки или другой тэг ('
low
').

$ dmalloc -1 dm-log -i 100 low

Как и Electric Fence, библиотека

dmalloc
может быть скомпонована с приложением статически или связана динамически при помощи
LD_PRELOAD
. Последнее демонстрирует следующий пример:

$ LD_PRELOAD=libdmalloc.so ch15-badmem1 -b /* Запустить с проверкой */

p = <not 30 bytes> /* Показан нормальный вывод */

ЗАМЕЧАНИЕ. Не используйте '

export LD_PRELOAD=libdmalloc.so
'! Если вы это сделаете, каждая программа, которую вы запустите, такая как
ls
, будет выполняться со включенной проверкой
malloc
. Ваша система быстро станет непригодной. Если вы сделали это случайно, можете использовать '
unset LD_PRELOAD
', чтобы восстановить обычное поведение.

Результаты записываются в файл

dm-log
следующим образом:

$ cat dm-log

1062078174: 1: Dmalloc version '4.8.1' from 'http://dmalloc.com/'

1062078174: 1: flags = 0x4e40503, logfile 'dm-log'

1062078174: 1: interval = 100, addr = 0, seen # = 0

1062078174: 1: starting time = 1062078174

1062078174: 1: free bucket count/bits: 63/6

1062078174: 1: basic-block 4096 bytes, alignment 8 bytes, heap grows up

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

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Чехов книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Чехов книга 3

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

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

Атаман царского Спецназа

Корчевский Юрий Григорьевич
Боевая фантастика Ю. Корчевского
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.00
рейтинг книги
Атаман царского Спецназа

Бестужев. Служба Государевой Безопасности. Книга третья

Измайлов Сергей
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья

Викинг

Мазин Александр Владимирович
1. Викинг
Приключения:
исторические приключения
8.92
рейтинг книги
Викинг

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Хозяин теней 2

Демина Карина
2. Громов
Фантастика:
аниме
попаданцы
фэнтези
7.00
рейтинг книги
Хозяин теней 2

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

"Искажающие реальность" Компиляция. Книги 1-14

Атаманов Михаил Александрович
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
5.00
рейтинг книги
Искажающие реальность Компиляция. Книги 1-14

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

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

#Бояръ-Аниме. Газлайтер. Том 36

Володин Григорий Григорьевич
36. История Телепата
Фантастика:
боевая фантастика
аниме
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 36