it-swarm-id.com

Lacak kesalahan segmentasi dalam PHP?

Saya mencari cara yang relatif tidak menyakitkan untuk melacak kesalahan segmentasi dalam PHP (seperti yang dilaporkan dalam log kesalahan Apache). Ini adalah pengaturan LAMP saya saat ini:

Linux: OpenSUSE 11.3 x86_64
Apache: 2.2.15-3.7
MySQL: 5.1.46-2.18
PHP: 5.3.2-1.31

Kode yang dipermasalahkan bukan milik saya, itu adalah Gallery2: http://gallery.menalto.com Skenario tipikal adalah saya pergi ke halaman utama galeri dan tidak ada thumbnail yang muncul tetapi saya mendapatkan satu set kesalahan segmentasi kesalahan baru di log kesalahan.

Mengingat kompleksitas relatif dari perangkat lunak itu, itu tidak terlalu cocok untuk bentuk debugging sederhana. Saya ingin dapat menelusuri kode dan melihat apa yang terjadi. "Solusi" yang saya lihat sejauh ini untuk melakukan hal ini cukup jauh dari "relatif tidak menyakitkan."

Saya telah berhasil menggunakan Gallery2 di server ini (versi sebelumnya dari paket perangkat lunak LAMP) dan di server lain, jadi saya berasumsi ada sesuatu yang rusak dalam konfigurasi saya saat ini, tetapi tanpa bisa melihat di mana kesalahan terjadi, saya tidak bisa memperbaiki atau mengatasinya.

3
S. W.

Bolehkah saya menyarankan melihat http://sourceforge.net/tracker/index.php?func=detail&aid=1692166&group_id=7130&atid=1071 dan http://gallery.menalto.com/ node/62436 # comment-22857 ?

Tampaknya ada masalah umum dengan menggunakan Apache_setenv atau gzipping URL dua kali (tergantung pada skenario - yang pertama tampaknya lebih mungkin dengan thumbnail tidak muncul):

Saya percaya bahwa masalahnya adalah mod_deflate mencoba gzip data untuk kedua kalinya berdasarkan URL, yang mengakibatkan kerusakan pada beberapa sistem. Memberitahu itu untuk tidak gzip file yang kami kirimkan membantu dalam hal ini.


Mungkin ada bug di PHP. Coba tambahkan $gallery->setConfig('apacheSetenvBroken', 1); ke config.php Anda untuk menonaktifkan menggunakan fungsi Apache_setenv ()

Menghargai ini bukan jawaban untuk pertanyaan yang Anda ajukan (di luar menggunakan Zend Framework dengan plugin atau baris perintah php dan gdb. Saya tidak tahu cara men-debug segfault dalam PHP) tetapi mungkin membantu.

2
Metalshark

Untuk men-debug PHP segfault Anda biasanya akan membuat file .php baru (sehingga tidak mengganggu kode utama Anda) seperti itu (menyebutnya my_first_debugger.php):

<?php
include('annoying_caller_page_that_crashes.php');
?>

Kemudian jalankan gdb php. Jika gdb tidak diinstal atau binari gdb/php tidak ada di path Anda, akan ada kesalahan jadi gunakan YaST2 untuk menginstal semua yang diperlukan (dapatkan pustaka pengembangan/debug untuk php juga karena biasanya menyertakan simbol debugging).

Anda akan mendapatkan output seperti:

GNU gdb x.x
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
(gdb) 

Kemudian lakukan run my_first_debugger.php di baris perintah.

Cari paket -dev dan -dbg jika ada pesan seperti (no debugging symbols found) atau Anda mungkin tidak melihat nama fungsi yang dipanggil.

0
Metalshark