0

私は現在、「The Apache Modules Book」という本を読んで、Apache2 モジュールの書き方を学んでいます。本からいくつかの例を試してみましたが、著者の Web サイトからソース ファイルを完全にコピーして貼り付けたとしても、セグメンテーション エラーが発生する場合がありました。

この例は、*.txt ファイルの要求で機能する出力フィルターであり、間に要求された txt ファイルの html エスケープされたコンテンツを含む html ヘッダーとフッターを追加します。

ソースコードはhttp://apache.webthing.com/mod_txt/で入手できます。

Apache のログ ファイルのエラーは次のとおりです。

[Thu Jan 12 20:38:01 2012] [お知らせ] child pid 3500 exit signal セグメンテーション違反 (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

コードに何か問題がありますか、それともフィルターのコンパイル/インストール/構成に何か問題がありますか?

私のシステム: Apache 2.2.14 がデフォルトの Ubuntu リポジトリからインストールされた 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
4

1 に答える 1

1

Apache モジュールのより専門的なデバッグ チュートリアルは、お読みの本 (第 12 章) に記載されています。

現在、Ubuntu Lucid Lynx で同じハードウェア/ソフトウェア構成 (apache 2.2.14) を実行しており、モジュールを正常にコンパイル/実行しています。

フォルダー /var/www/ に HTML ドキュメントを配置しましたが、拡張子を .txt に変更しただけで、ブラウザー (localhost/some-html.txt) と出力 (配置したタグに応じて) を介してアクセスしますヘッダー ファイルとフッター ファイルで) が正常に表現されました (ヘッダー ファイルとフッター ファイルでそれぞれ<pre></pre>タグを使用したため、整形済みのテキストとして)。

于 2012-05-10T10:25:55.643 に答える