LeopardでApacheモジュールをGDBでデバッグするときの注意点

Leopardでデフォルトで入っているApacheやportでいれたApacheだと自作モジュールをGDBデバッグしようとすると以下のように行番号の情報が取れてないようでうまくいきません。

$ sudo gdb /opt/local/apache2/bin/httpd
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin"...Reading symbols for shared libraries ......... done

(gdb) b orz_handler
Function "orz_handler" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (orz_handler) pending.
(gdb) r -X
Starting program: /opt/local/apache2/bin/httpd -X
Reading symbols for shared libraries ++++++++. done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries .. done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries ... done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Breakpoint 1 at 0x783eeb
Pending breakpoint 1 - "orz_handler" resolved
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries .. done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries ... done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Breakpoint 1 at 0x783eeb
Pending breakpoint 1 - "orz_handler" resolved

Breakpoint 1, 0x00783eeb in orz_handler ()
(gdb) n
Single stepping until exit from function orz_handler, 
which has no line number information.
0x000027a8 in ap_run_handler ()

なのでデバッグオプション付きでApacheをソースからコンパイル、インストールすると大丈夫みたいです。

$ wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.2.11.tar.gz
$ tar zxvf httpd-2.2.11.tar.gz 
$ cd httpd-2.2.11
$ export CFLAGS="-g"
$ ./configure --enable-module=so
$ make
$ sudo make install

そうすれば以下のような感じでうまくいきました。

$ sudo gdb /usr/local/apache2/bin/httpd
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin"...Reading symbols for shared libraries ........ done

(gdb) b orz_handler
Function "orz_handler" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (orz_handler) pending.
(gdb) r -X
Starting program: /usr/local/apache2/bin/httpd -X
Reading symbols for shared libraries +++++++. done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Breakpoint 1 at 0x204efc: file mod_orz.c, line 47.
Pending breakpoint 1 - "orz_handler" resolved
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Breakpoint 1 at 0x204efc: file mod_orz.c, line 47.
Pending breakpoint 1 - "orz_handler" resolved

Breakpoint 1, 0x00204efc in orz_handler (r=0x8bb650) at mod_orz.c:47
47	{
(gdb) n
48	    if (strcmp(r->handler, "orz")) {
(gdb) n
51	    r->content_type = "text/html";      
(gdb) n
53	    if (!r->header_only)
(gdb) n
54	        ap_rputs("The sample page from mod_orz.c\n", r);
(gdb) bt
#0  orz_handler (r=0x8bb650) at mod_orz.c:54
#1  0x00002d49 in ap_run_handler ()
#2  0x00003586 in ap_invoke_handler ()
#3  0x0003e167 in ap_process_request ()
#4  0x0003a33b in ap_process_http_connection ()
#5  0x00012c0d in ap_run_process_connection ()
#6  0x00013089 in ap_process_connection ()
#7  0x000586ff in child_main ()
#8  0x0005881c in make_child ()
#9  0x00058eb9 in ap_mpm_run ()
#10 0x0000a9d5 in main ()
(gdb) l
49	        return DECLINED;
50	    }
51	    r->content_type = "text/html";      
52	
53	    if (!r->header_only)
54	        ap_rputs("The sample page from mod_orz.c\n", r);
55	    return OK;
56	}
57	
58	static void orz_register_hooks(apr_pool_t *p)
(gdb) c
Continuing.

unixの世界はツンデレですね。なかなか振り向いてもらえないですけどガンガリます。