Apache Версия 2.0 Сервера HTTP
механизм распределения в пределах АПРЕЛЯ имеет множество способов отладки, которые могут использоваться, чтобы помочь в обнаружении проблем памяти. Этот документ описывает доступные способы и дает инструкции при формировании их.
free()
d память и другая такая ерунда.
теория проста.
FILL_BYTE
(
0xa5
) написан по всем
malloc
'd память, поскольку мы получаем это, и написаны по всему, что мы освобождаем в течение a
clear_pool
. мы проверяем, что блоки в свободном списке всегда имеют
FILL_BYTE
в них, и мы проверяем в течение
palloc()
то, что байты все еще имеют
FILL_BYTE
в них. Если Вы когда-либо видите URL мусора или этажерку, содержащую много из
0xa5
s тогда Вы знаете кое-что используемые данные, это было освобождено или некалибровалось.
malloc()
и
free()
d соответственно в конце.
это предназначено, чтобы использоваться кое с чем как Электрический Забор или Очистить, чтобы помочь обнаруживать проблемы памяти. Отметьте, что, если Вы используете efence тогда, Вы должны также включить
ALLOC_DEBUG
. но не включайте
ALLOC_DEBUG
если Вы используете, Очищают потому что
ALLOC_DEBUG
скрыл бы все некалибровавшие прочитанные ошибки, которые Очищают, может диагностировать.
в частности это вызывает
table_{set,add,merge}n
рутины, чтобы проверить, что их аргументы являются безопасными для
apr_table_t
они размещаются в. Это в настоящее время только работает с моделью мультипроцесса unix, но могло быть расширено на другие.
это требует недавнего gcc, который поддерживает
__builtin_return_address()
. error_log продукция будет сообщением, типа:
table_push: apr_table_t created by 0x804d874 hit limit of 10
использование
l *0x804d874
находить источник, который соответствует. Это указывает это a
apr_table_t
ассигнованный запросом в том адресе имеет возможно слишком маленькое начальное
apr_table_t
предположение размера.
это требует чего - то вроде понимания того, как alloc.c работает.
не все варианты, выделенные выше могут быть активизированы в то же самое время. следующий стол дает больше информации.
ОТЛАДКА ALLOC | ИСПОЛЬЗОВАНИЕ ALLOC MALLOC | ОТЛАДКА ОБЪЕДИНЕНИЯ | СДЕЛАТЬ ПРОФИЛЬ СТОЛА | ALLOC STATS | |
---|---|---|---|---|---|
ОТЛАДКА ALLOC | - | Нет | да | да | да |
ИСПОЛЬЗОВАНИЕ ALLOC MALLOC | Нет | - | Нет | Нет | Нет |
ОТЛАДКА ОБЪЕДИНЕНИЯ | да | Нет | - | да | да |
СДЕЛАТЬ ПРОФИЛЬ СТОЛА | да | Нет | да | - | да |
ALLOC STATS | да | Нет | да | да | - |
дополнительно варианты отладки не являются подходящими для мультипереплетенных версий сервера. Пробуя отлаживать с этими вариантами сервер должен быть начат в единственном способе процесса.
различные варианты для того, чтобы отлаживать память теперь позволяются в
apr_general.h
файл удара головой в апреле. Различные варианты позволяются, некомментируя определение для выбора, который Вы желаете использовать. Секция кодекса в настоящее время похожа на это (
содержавшийся в srclib/apr/include/apr_pools.h
)
/*
#define ALLOC_DEBUG
#define POOL_DEBUG
#define ALLOC_USE_MALLOC
#define MAKE_TABLE_PROFILE
#define ALLOC_STATS
*/
typedef struct ap_pool_t {
union block_hdr *first;
union block_hdr *last;
struct cleanup *cleanups;
struct process_chain *subprocesses;
struct ap_pool_t *sub_pools;
struct ap_pool_t *sub_next;
struct ap_pool_t *sub_prev;
struct ap_pool_t *parent;
char *free_first_avail;
#ifdef ALLOC_USE_MALLOC
void *allocation_list;
#endif
#ifdef POOL_DEBUG
struct ap_pool_t *joined;
#endif
int (*apr_abort)(int retcode);
struct datastruct *prog_data;
} ap_pool_t;
позволять распределение, отлаживающее просто перемещаются
#define ALLOC_DEBUG
выше начала комментариев блокируют и восстанавливают сервер.
чтобы использовать различные варианты сервер должен быть восстановлен после редактирования файла удара головой.