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
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';
Справочная страница
EF_PROTECT_BELOW
Установка этой переменной в 1 заставляет Electric Fence проверять
EF_PROTECT_FREE
Установка этой переменной в 1 предотвращает повторное использование Electric Fence памяти, которая была корректно освобождена. Это полезно, когда вы думаете, что программа может получать доступ к освобожденной памяти; если освобожденная память впоследствии была выделена заново, доступ к ней через предыдущий висячий указатель остался бы в противном случае незамеченным.
EF_ALLOW_MALLOC_0
При наличии ненулевого значения Electric Fence допускает вызовы 'malloc(0)
Вдобавок к переменным окружения Electric Fence предоставляет глобальные переменные с такими же названиями. Вы можете изменить их значения из отладчика, так что можно динамически изменять поведение программы, которая уже начала выполнение. Подробности см. в
15.5.2.3. Отладка Malloc: dmalloc
Библиотека dmalloc
Библиотека dmalloc
DMALLOC_OPTIONS управляющей информации. Например, она может выглядеть следующим образом:$ echo $DMALLOC_OPTIONS
debug=0x4e40503,inter=100,log=dm-log
Компонент 'debug
Первый шаг заключается в определении функции оболочки с названием dmalloc
dmalloc:$ dmalloc() {
> eval 'command dmalloc -b $*'
> }
После того, как это сделано, вы можете передать функции опции для установки файла журнала (-1), указать число итераций, после которых dmalloc
low').$ dmalloc -1 dm-log -i 100 low
Как и Electric Fence, библиотека dmalloc
LD_PRELOAD. Последнее демонстрирует следующий пример:$ LD_PRELOAD=libdmalloc.so ch15-badmem1 -b
p =
ЗАМЕЧАНИЕ
. Не используйте 'export LD_PRELOAD=libdmalloc.so'! Если вы это сделаете, каждая программа, которую вы запустите, такая как ls, будет выполняться со включенной проверкой malloc(). Ваша система быстро станет непригодной. Если вы сделали это случайно, можете использовать 'unset LD_PRELOAD', чтобы восстановить обычное поведение.