[PHP-users 32483] Re: Apache経由ではなく直接phpを実行するとセグメンテーション違反と表示される
浦田 うらた
be5b @ hotmail.com
2007年 7月 24日 (火) 19:21:54 JST
お世話になります。浦田です。
hotmailの設定が甘くてハンドルネームとして成り立ってなかったので、改めて名前
で失礼します。
あれから色々と調べようがないか四苦八苦していたのですが、gdbなるもので
もっと情報が集められそうということで試してみました。
# gdb php
GNU gdb Red Hat Linux (6.3.0.0-1.96rh)
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-redhat-linux-gnu"...Using host
libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) run -h shell php
Starting program: /usr/local/bin/php -h shell php
[Thread debugging using libthread_db enabled]
[New Thread -1208047936 (LWP 22419)]
Usage: php [options] [-f] <file> [args...]
php [options] -r <code> [args...]
:省略
args... Arguments passed to script. Use -- args when first
argument
starts with - or script is read from stdin
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1208047936 (LWP 22419)]
0x08309d20 in ?? ()
(gdb) where
#0 0x08309d20 in ?? ()
#1 0x0813e7a8 in php_end_ob_buffer (send_buffer=1 '\001', just_flush=0
'\0',
tsrm_ls=0x83040c0) at /usr/src/php/php-4.4.7/main/output.c:224
#2 0x0813ec3e in php_end_ob_buffers (send_buffer=1 '\001',
tsrm_ls=0x83040c0)
at /usr/src/php/php-4.4.7/main/output.c:341
#3 0x0817bfa5 in main (argc=4, argv=0xbffff924)
at /usr/src/php/php-4.4.7/sapi/cli/php_cli.c:643
(gdb) bt
#0 0x08309d20 in ?? ()
#1 0x0813e7a8 in php_end_ob_buffer (send_buffer=1 '\001', just_flush=0
'\0',
tsrm_ls=0x83040c0) at /usr/src/php/php-4.4.7/main/output.c:224
#2 0x0813ec3e in php_end_ob_buffers (send_buffer=1 '\001',
tsrm_ls=0x83040c0)
at /usr/src/php/php-4.4.7/main/output.c:341
#3 0x0817bfa5 in main (argc=4, argv=0xbffff924)
at /usr/src/php/php-4.4.7/sapi/cli/php_cli.c:643
(gdb)
ソースファイルが指し示す箇所はそれぞれ以下の通りでした。
php_cli.c:643
case 'i': /* php info & quit */
if (php_request_startup(TSRMLS_C)==FAILURE)
{
goto err;
}
php_print_info(0xFFFFFFFF TSRMLS_CC);
php_end_ob_buffers(1 TSRMLS_CC); <-ココ
exit_status=0;
goto out;
output.c:341
/* {{{ php_end_ob_buffers
* End output buffering (all buffers) */
PHPAPI void php_end_ob_buffers(zend_bool send_buffer TSRMLS_DC)
{
while (OG(ob_nesting_level)!=0) {
php_end_ob_buffer(send_buffer, 0 TSRMLS_CC); <-ココ
output.c:224
if (OG(active_ob_buffer).internal_output_handler) {
final_buffer = OG(active_ob_buffer).internal_output_handler_buffer;
final_buffer_length =
OG(active_ob_buffer).internal_output_handler_buffer_size;
OG(active_ob_buffer).internal_output_handler(OG(active_ob_buffer).buffer,
OG(active_ob_buffer).text_length, &final_buffer, &final_buffer_length,
status TSRMLS_CC); <-ココ
} else if (OG(active_ob_buffer).output_handler) {
zval **params[2];
zval *orig_buffer;
zval *z_status;
長くなり申し訳ありません。
"# php -h" でも同じエラーが出るのですが、gdbで追った結果は全く同一でした。
3カ所ともTSRMLS_CCとbufferというキーワードがあるのですが、現時点ではここまで
で
止まってます。残念ながらc言語は学生時代以来触っておらず、
これだというものは無い状態です。
誠に情けなくはあるのですが、ここまでの情報で「ここが怪しい」「根本的に間違っ
てる」
といったことはわかりませんでしょうか。何かヒントをお持ちの方がおられれば
教えていただければ助かります。
#なおcoreダンプも出してみたのですが、中身がよくわからず挫折しました・・・・
be5b @ hotmail.com
_________________________________________________________________
マドンナ、レッチリ、リンキンパーク、ポリス他、LIVE EARTHのコンサート映像を無
料配信中! http://liveearth.jp.msn.com/
PHP-users メーリングリストの案内