c - Apache2 模块中的段错误

标签 c apache2 apache2-module

我目前正在阅读《The Apache Modules Book》一书来学习编写 Apache2 模块。 我尝试了书中的一些示例,在一种情况下,即使我完全从作者的网站复制并粘贴源文件,我也会遇到段错误。

该示例是一个输出过滤器,用于处理 *.txt 文件的请求,添加 html 页眉和页脚,并在其间添加所请求 txt 文件的 html 转义内容。

源代码位于:http://apache.webthing.com/mod_txt/

apache日志文件中的错误如下:

[Thu Jan 12 20:38:01 2012] [notice] child pid 3500 exit signal Segmentation fault (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,从默认 Ubuntu 存储库安装了 Apache 2.2.14。

我真的很感激任何关于此的提示!

提前致谢!

最诚挚的问候, 罗伯特

[编辑] 一些附加信息:

我使用 gdb 来获取有关段错误发生位置的更多信息。 有什么方法可以获得准确的行号吗?

这是输出:

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

最佳答案

更专业的 apache 模块调试教程可以在您正在阅读的书中找到(第 12 章)。

目前我在 Ubuntu Lucid Lynx 上运行相同的硬件/软件配置(apache 2.2.14)并成功编译/运行该模块。

在文件夹/var/www/中,我放置了一个 HTML 文档,但仅将其扩展名更改为 .txt 并通过我的浏览器 (localhost/some-html.txt) 和输出(取决于您的标签)访问它已放入页眉和页脚文件)已成功表示(作为预格式化文本,因为我分别在页眉和页脚文件中使用了 <pre></pre> 标签。)

关于c - Apache2 模块中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8843300/

相关文章:

c - 实现命令行参数

c - 转义序列在 C 中产生意外输出

c - 如何以编程方式确定驱动器的空间/大小?在 LInux 和 Windows 中

svn: E175005: 路径已经存在

apache - 如何将 HTTP 永久重定向到 HTTPS SSL url?

c++ - 在 fork() 之后关闭监听套接字

c - Axis2/c安装错误

apache2 - Apache2 上的 FallbackResource (2.2.22 (Ubuntu))

c - C 中的 Apache 模块 : how to write data to client socket?

c++ - Apache2 模块中的无窗口 OpenGL 上下文