Я задокументировал свой собственный опыт отладки модуля Apache mod_deflate с использованием ddd (внешний интерфейс gdb) Здесь . Содержание этого поста ниже:
В этом руководстве описаны шаги, необходимые для отладки модуля Apache 2.2.16. Отлаживаемый модуль в этом примере - это модуль deflate (mod_deflate.c), а также библиотека zlib, которая используется для сжатия данных. И библиотека zlib, и модуль deflate, в этом примере, содержат пользовательский код, с которым мы хотим перейти.
- Загрузите и скомпилируйте исходный код Apache. Также убедитесь, что у вас еще нет установки Apache в вашей системе. Вы можете скачать исходники Apache здесь.
$ EXTRA_CFLAGS = "- g" ./configure --prefix = / ap --with-enabled-apr --enable-mods-shared = all
$ make
$ make install
Примечания:
EXTRA_CFLAGS = "- g" говорит компилятору включить символы отладки.
--prefix = / ap Помещает установку в / ap.
--with-enabled-apr устраняет возможность несовпадения версий или опций компиляции с кодом APR и APR-util (может быть необязательно, но не повредит).
--enable-mods-shared = all позволяет изменять модуль, а затем перезагружать его. Если эта опция не используется, код модуля компилируется в основной двоичный файл Apache.
- Обновите файл конфигурации Apache по адресу /ap/config/httpd.conf.
Убедитесь, что есть строка LoadModule deflate_module modules / mod_deflate.so (или что-то подобное).
Добавьте строку AddOutputFilterByType DEFLATE text / html text / plain text / xml (или что-то подобное).
- Скомпилируйте библиотеку zlib (с флагами компиляции по умолчанию в этом случае).
$ CFLAGS = "- g" ./configure --prefix = bin
В Makefile удалите опцию -03, чтобы код не был оптимизирован.
$ make test
$ make install
Примечания:
По умолчанию zlib создает статическую библиотеку.
EXTRA_CFLAGS = -g говорит компилятору включить символы отладки.
--prefix = / ap Помещает установку в корзину.
- Скомпилируйте и установите mod_deflate.
$ / ap / bin / apxs -I / mydir / zlib / bin / include / -L / mydir / zlib / bin / lib / -c mod_deflate.c -lahaz -g
$ cp .libs / mod_deflate.so
$ /ap/modules/mod_deflate.so
$ / ap / bin / apachectl -k stop
$ / ap / bin / apachectl -k start
Примечания:
-g говорит компилятору включить символы отладки.
- Начать отладку
$ ddd / ap / bin / httpd
(gdb) r -X
ctrl-c для возврата к приглашению gdb
Файл-> Открытый исходный код и выберите mod_deflate.c или aha363_zlib.c
Установить точку останова визуально или с помощью команды gdb (т. Е. (Gdb) b aha363_zlib.c)
Примечания: Из книги модулей Apache - Разработка приложений с использованием Apache pg 328 «… мы используем опцию -X, чтобы предотвратить отключение Apache,
разветвление детей и переход в режим демона ... [Apache] блокируется во время ожидания входящих соединений. Все модули загружены, а
конфигурация активна. Если мы оставим его там, веб-сервер в основном запущен и будет обслуживать входящий запрос. Мы можем прервать это с
Ctrl-c, чтобы вернуться к отладчику. ”
Это должно быть все, что требуется для подготовки кода модуля Apache к отладке.