it-swarm-eu.dev

Sledujte chyby segmentace v PHP?

Hledám relativně bezbolestný způsob, jak sledovat chyby segmentace v PHP (jak je uvedeno v protokolu chyb Apache). Toto je momentálně moje nastavení LAMP:

Linux: OpenSUSE 11,3 x86_64
Apache: 2.2.15-3.7
MySQL: 5.1.46-2.18
PHP: 5.3.2-1.31

Dotčený kód není můj, je to Gallery2: http://gallery.menalto.com Typický scénář je, že jdu na hlavní stránku galerie a neobjeví se žádná z miniatur, ale dostanu nová sada chyb chyby segmentace v protokolu chyb.

Vzhledem k relativní složitosti tohoto softwaru není vhodný pro jednoduché formy ladění. Chtěl bych být schopen projít kódem a přesně vidět, co se děje. „Řešení“, která jsem doposud viděl, se zdaleka „relativně bezbolestná“.

Úspěšně jsem použil Gallery2 na tomto serveru (dřívější verze softwarových balíků LAMP) a na jiných serverech, takže předpokládám, že v mé současné konfiguraci je něco vadného, ​​ale aniž bych viděl, kde k chybě dochází, nemohu opravit nebo obejít.

3
S. W.

Mohu navrhnout pohled na http://sourceforge.net/tracker/index.php?func=detail&aid=1692166&group_id=7130&atid=1071 a http://gallery.menalto.com/ uzel/62436 # comment-22857 ?

Zdá se, že existují běžné problémy s použitím Apache_setenv nebo s gzipováním adresy URL dvakrát (v závislosti na scénáři - první se zdá být pravděpodobnější, když se miniatury nezobrazí):

Věřím, že problém je v tom, že se mod_deflate pokusí gzip data podruhé na základě adresy URL, což v některých systémech způsobí poškození. V tomto případě vám pomůžeme říct, aby soubory, které posíláme, nezaznamenali.


V PHP může být chyba. Zkuste přidat $gallery->setConfig('apacheSetenvBroken', 1); do svého config.php a deaktivovat pomocí funkce Apache_setenv ()

Oceňuji, že to není odpověď na otázku, kterou se ptáte (kromě použití Zend Framework s pluginy nebo příkazovým řádkem php a gdb nevím, jak ladit segfaults v PHP), ale může to pomoci.

2
Metalshark

Chcete-li ladit PHP segfaults, obvykle vytvoříte nový .php soubor (tak, aby to nezasahoval do vašeho hlavního kódu), jako tomu tak (nazývá se _my_first_debugger.php_):

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

Poté spusťte _gdb php_. Pokud není nainstalován gdb nebo gdb/php binární soubory nejsou ve vaší cestě, dojde k chybám, takže pomocí YaST2 nainstalujte vše potřebné (získejte také vývojové/ladicí knihovny pro php, protože obvykle zahrnují ladicí symboly).

Získáte výstup jako:

_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) 
_

Pak stačí udělat _run my_first_debugger.php_ v příkazovém řádku.

Vyhledejte balíčky -dev a -dbg, pokud existují zprávy jako _(no debugging symbols found)_ nebo pokud se vám nezobrazí název volané funkce.

0
Metalshark