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.