メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年4月28日月曜日

[mod_chxj] Apache モジュールのデバッグ方法

mod_chxjで使用しているApacheモジュールのデバッグ方法をメモです。
とりたてて珍しいことはしていません・・・。
なので、役に立たないかも。


gdbを使ったデバッグ
一番良く使うのがgdb。
使い方はgdbマニュアルに詳しい。(そりゃそうか。)

とりあえず、モジュールを-gでコンパイルしておきます(できたらApacheも)。
以下、私の環境(Debian etch壊)での手順です。


# gdb /usr/sbin/apache2
 

で起動して、、、

たとえば、chxj_chtml10_convert()の中身を追いたいなら、

(gdb) b chxj_chtml10_convert
 

とやる。多分シンボル名が解決できないけどいい?って聞かれるんで、'y'を入力。

で、apacheの起動。

(gdb) run -X -f /etc/apache2/apache2.conf
 

で起動っす。-Xはつけないと意味不明になると思う。。

起動できたら、ブラウザ等からアクセス。
chxj_chtml10_convert()に処理が入ると止まるので、
's'なり'n'なりで1ステップづつ見ていったりする。

gdbのマニュアルを見ればもっと詳細に書かれているす。



fprintfでのデバッグ
あんまり利用しないが、
プログラムにfprintf(stderr,....)な感じでデバッグ文を埋め込んでおき、
apacheを-Xで起動すると、/var/log/apache2/error.log(Debianの場合)に
埋め込んでおいたデバッグ文が出力されます。

gdbで起動しておけば、標準エラー出力に出力されるので、もっと便利かも。


ap_log_rerrorや、ap_log_errorを使ったデバッグ文。
これもプログラム中に埋め込んでおき、/var/log/apache2/error.logにデバッグ文を出力
させて確認するパターン。
mod_chxjでは、DBGや、SERR、などマクロにして使っています。


ApacheのDEBUG_POOLオプションについて
mod_chxjにおいては特に意味を成さないと思っていますんで利用してません。
Apache内部での処理がDEBUG_POOLオプションをつけた場合とつけない場合で、
結構違うみたいなんで。。


valgrind
たまに実行してみる程度。
今のところ、特に役に立った記憶は無いです。
phpモジュールのエラーはやたらと出るけど・・・。


な感じ。取り立ててあたらしいことなしでした。

.

0 コメント: