我目前正在阅读“The Apache Modules Book”一书来学习编写Apache2模块。 我尝试了本书中的一些例子,在一个案例中,我得到了一个分段错误,即使我完全复制并粘贴了作者网站上的源文件。
该示例是一个输出过滤器,用于处理* .txt文件的请求,添加一个html页眉和页脚,其中包含所请求的txt文件的html转义内容。
源代码位于:http://apache.webthing.com/mod_txt/
apache日志文件中的错误如下:
[Thu 1月12日20:38:01] [通知]儿童pid 3500退出信号 分段错误(11)
我使用以下命令安装了模块:
apxs2 -c mod_txt.c
sudo apxs2 -i mod_txt.la
sudo service apache2 restart
使用apxs2时没有编译错误。
我在httpd.conf文件中添加了Filter,如下所示:
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存储库安装了Apache 2.2.14的Ubuntu Lucid Lynx 10.04.3。
我真的很感激任何暗示!
提前致谢!
祝你好运, 罗伯特
[编辑] 一些其他信息:
我使用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
答案 0 :(得分:1)
更多专业的apache模块调试教程可以在你正在阅读的书中找到(第12章)。
目前我在Ubuntu Lucid Lynx上运行相同的硬件/软件配置(apache 2.2.14)并成功编译/运行该模块。
在文件夹/ var / www /中我放了一个HTML文档,但只将它的扩展名改为.txt并通过我的浏览器(localhost / some-html.txt)和输出(取决于你的标签)来访问它已成功表示(已插入页眉和页脚文件)(作为预先格式化的文本,因为我分别在页眉和页脚文件中使用了<pre>
和</pre>
标记。)