Ошибка сегментации в модуле Apache2 - PullRequest
0 голосов
/ 13 января 2012

В настоящее время я читаю книгу «Книга модулей Apache», чтобы научиться писать модули Apache2.Я попробовал несколько примеров из книги, и в одном случае я получил ошибку сегментации, даже если я полностью скопировал и вставил исходный файл с сайта автора.

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

Исходный код доступен по адресу: http://apache.webthing.com/mod_txt/

Ошибка в файле журнала apache следующая:

[Чт 12 января 20:38:01 2012] [note] child pid3500 выходной сигнал Ошибка сегментации (11)

Я установил модуль с помощью следующих команд:

apxs2 -c mod_txt.c 
sudo apxs2 -i mod_txt.la 
sudo service apache2 restart

При использовании apxs2 нет ошибок компиляции.

Я добавил фильтр в файл httpd.conf следующим образом:

LoadModule txt_module /usr/lib/apache2/modules/mod_txt.so
AddOutputFilter text-filter .txt
AddType text/html .txt
TextHeader /home/robert/header.txt
TextFooter /home/robert/footer.txt

Что-то не так с кодом или я что-то не так с компиляцией / установкой / настройкой фильтра?

Моя система: Ubuntu Lucid Lynx 10.04.3 с Apache 2.2.14, установленным из стандартного репозитория Ubuntu.

Буду очень признателен за любую подсказку!

Заранее спасибо!

С наилучшими пожеланиями, Роберт

[Редактировать] Некоторыедополнительная информация:

Я использовал gdb, чтобы получить больше информации о том, где происходит segfault.Можно ли как-нибудь получить точный номер строки?

Это вывод:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xab472b70 (LWP 4041)]
0xb7d3fb9b in txt_filter () from /usr/lib/apache2/modules/mod_txt.so
(gdb) bt
#0  0xb7d3fb9b in txt_filter () from /usr/lib/apache2/modules/mod_txt.so
#1  0x00154150 in ap_pass_brigade (next=0x2e3198, bb=0xb7f4fff4)
    at /build/buildd/apache2-2.2.14/server/util_filter.c:526
#2  0x00141147 in default_handler (r=0x2e4ea8)
    at /build/buildd/apache2-2.2.14/server/core.c:3757
#3  0x00148321 in ap_run_handler (r=0x2e4ea8)
    at /build/buildd/apache2-2.2.14/server/config.c:159
#4  0x0014c107 in ap_invoke_handler (r=0x2e4ea8)
    at /build/buildd/apache2-2.2.14/server/config.c:373
#5  0x0015b6b8 in ap_process_request (r=0x2e4ea8)
    at /build/buildd/apache2-2.2.14/modules/http/http_request.c:282
#6  0x001581e8 in ap_process_http_connection (c=0x2defd0)
    at /build/buildd/apache2-2.2.14/modules/http/http_core.c:190
#7  0x00150b91 in ap_run_process_connection (c=0x2defd0)
    at /build/buildd/apache2-2.2.14/server/connection.c:43
#8  0x0016249b in process_socket (thd=0x2a7958, dummy=0x2dda00)
    at /build/buildd/apache2-2.2.14/server/mpm/worker/worker.c:544
#9  worker_thread (thd=0x2a7958, dummy=0x2dda00)
    at /build/buildd/apache2-2.2.14/server/mpm/worker/worker.c:894
#10 0xb7f781e1 in ?? () from /usr/lib/libapr-1.so.0
#11 0xb7f3f96e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#12 0xb7eada4e in clone () from /lib/tls/i686/cmov/libc.so.6

1 Ответ

1 голос
/ 10 мая 2012

Более подробное руководство по отладке для модулей Apache можно найти в книге, которую вы читаете (Глава 12).

В настоящее время я использую ту же аппаратную / программную конфигурацию (apache 2.2.14) на Ubuntu Lucid Lynx и успешно скомпилировал / запустил модуль.

В папке / var / www / я поместил документ HTML, но изменил только его расширение на .txt и получил к нему доступ через мой браузер (localhost / some-html.txt) и вывод (в зависимости от тегов Помещенный в файлы верхнего и нижнего колонтитула) был успешно представлен (в виде предварительно отформатированного текста, поскольку я использовал теги <pre> и </pre> в файлах верхнего и нижнего колонтитула соответственно.)

...