3

私は最近Apacheモジュールを書いています。メモリプールパラダイムを使用することは興味深いことですが、私は明らかに正しいことをしていません。セグメンテーション違反が発生しましたが、見つからないようです。私の現在のデバッグサイクルには、ap_rprintfsと、Apacheを再構築して再ロードするmakeスクリプトが含まれます。

このタイプの環境で作業するために利用できるツールの種類は何ですか?

4

2 に答える 2

5

GNU Debugger(gdb)を使用する必要があります。コマンドを介して、 gdb内gdb bin/httpdよりもApacheを起動します。r -Xsegfaultが発生すると、コマンドで発生した場所を確認できますbt

于 2009-12-26T13:35:43.010 に答える
2

ddd (gdb フロントエンド) を使用して mod_deflate Apache モジュールをデバッグした私自身の経験をここに記録しました。その投稿の内容は以下のとおりです。


このガイドでは、Apache 2.2.16 モジュールをデバッグするために必要な手順について説明します。この例でデバッグされているモジュールは、deflate モジュール (mod_deflate.c) と、データの圧縮に使用される zlib ライブラリです。この例では、zlib ライブラリと deflate モジュールの両方に、ステップ実行するカスタム コードが含まれています。

  1. Apache ソース配布をダウンロードしてコンパイルします。また、システムに Apache がインストールされていないことも確認してください。ここから Apache ソースをダウンロードできます。

$ EXTRA_CFLAGS="-g" ./configure --prefix=/ap --with-included-apr --enable-mods-shared=all

$メイク

$ make install

注: EXTRA_CFLAGS="-g" は、コンパイラにデバッグ シンボルを含めるように指示します。--prefix=/ap インストールを /ap に配置します。--with-included-apr は、APR および APR-util コードとのバージョンまたはコンパイル オプションの不一致の可能性を取り除きます (必要ではないかもしれませんが、害はありません)。--enable-mods-shared=all を使用すると、モジュールを変更してから再ロードできます。このオプションを使用しない場合、モジュール コードはメインの Apache バイナリにコンパイルされます。

  1. /ap/config/httpd.conf にある Apache 構成ファイルを更新します。

LoadModule deflate_module modules/mod_deflate.so (または類似のもの) という行が存在することを確認してください。行 AddOutputFilterByType DEFLATE text/html text/plain text/xml (または類似のもの) を追加します。

  1. zlib ライブラリをコンパイルします (この場合はデフォルトのコンパイル フラグを使用)。

$ CFLAGS="-g" ./configure --prefix=bin

コードが最適化されないように、Makefile で -03 オプションを削除します。

$ テストを行う

$ make install

注: デフォルトでは、zlib は静的ライブラリを構築します。EXTRA_CFLAGS=-g は、コンパイラにデバッグ シンボルを含めるように指示します。--prefix=/ap インストールをビンに配置します。

  1. 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 ストップ

$ /ap/bin/apachectl -k 開始

注: -g は、コンパイラにデバッグ シンボルを含めるように指示します。

  1. デバッグを開始

$ ddd /ap/bin/httpd

(gdb) r -X

ctrl-c で gdb プロンプトに戻ります

File->Open Source で mod_deflate.c または aha363_zlib.c を選択

ブレークポイントを視覚的に設定するか、gdb コマンド (つまり (gdb) b aha363_zlib.c ) を介して設定します。

注: From The Apache Modules Book – Application Development with Apache pg 328 「.. -X オプションを使用して、Apache が自身を切り離し、子をフォークし、デーモン モードに入るのを防ぎます... [Apache] は着信接続の待機中にブロックされます。すべてのモジュールがロードされ、構成がアクティブになります。そこに置いておくと、Webサーバーは基本的に稼働しており、着信要求を処理します. Ctrl-c で中断してデバッガーに戻ることができます。」</p>

これで、Apache モジュール コードをデバッグする準備が整います。

于 2011-11-19T08:28:31.423 に答える