2009年8月23日 星期日

[PHP] gdb php.core

沒有想過,原來自己寫的 PHP 也會產生這個檔案。這個原因是出自於我架的 Apache HTTPD 運行 PHP 所產生的,透過 HTTPD 類似執行 shell_exec( "/path/bin/php /tmp/test.php > /dev/null & " );


如果產生 php.core 檔案,可以到官網參考解決方式:



我自己的情況是透過以下方式看訊息的:



  • # gdb /path/bin/php php.core

    • (gdb) bt ;

    • 會蹦出一堆訊息讓你參考

      • #0  0x88b9194d in calloc () from /lib/libc.so.7
        #1  0x88b91b7e in free () from /lib/libc.so.7
        #2  0x082cbf9a in destroy_zend_class (pce=0x88e3e76c) at /path/php-5.2.10/Zend/zend_opcode.c:202
        #3  0x082de386 in zend_hash_destroy (ht=0x10) at /path/php-5.2.10/Zend/zend_hash.c:526
        #4  0x082d48b8 in zend_shutdown () at /path/php-5.2.10/Zend/zend.c:736
        #5  0x08293f3f in php_module_shutdown () at /path/php-5.2.10/main/main.c:1908
        #6  0x083500a0 in main (argc=4, argv=0xbfbfe71c) at /path/php-5.2.10/sapi/cli/php_cli.c:1357





  • # gdb /path/bin/php

    • (gdb) run /tmp/test.php arg1 arg2 arg3;

    • 沒多久看到訊息

      • ...

      • Fatal error: Call to undefined function imagecreatefromstring() in /tmp/test.php on line xxx

      • ...

      • Program received signal SIGSEGV, Segmentation fault

      • 0x88b9194d in calloc () from /lib/libc.so.7






因此,至少知道點方向了 :-) 但這主因並不是缺少 library 啦,經多次測試後,發現用 5.2.10 使用 imap_search 後產生的問題,改用 5.2.9 就不會出現 Segmentation fault 啦。


# [ @ php-5.2.10 ] ./configure --with-apxs2=/path/httpd/bin/apxs --prefix=/path/php --without-pear --with-openssl --with-imap --with-imap-ssl


使用 imap_open -> imap_search -> imap_close 則會出現 Segmentation fault ,但改用 php-5.2.9 就不會發生。


另外一聊,在開發移植的環境上,最好先弄個 lib_test.php 的檔案,用來測試必要的 function 是否存在:



  • <?php
    $test_func = array(
            'imagecreatefromstring' ,
            'imagesx' ,
            'imagesy' ,
            'imagecopyresized' ,
            'imagejpeg' ,
            'imagedestroy'
    );
    foreach( $test_func as $v )
            if( !function_exists( $v ) )
                    echo "'$v' not found!\n";
    ?>

  • # /path/bin/php lib_test.php


沒有留言:

張貼留言