it-swarm-tr.com

PHP'de segmentasyon hataları izlemek?

Bölümlendirme hatalarını PHP (Apache hata günlüğünde bildirildiği gibi) izlemenin nispeten acısız bir yolunu arıyorum. Bu şu anda LAMP kurulumum:

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

Söz konusu kod benim değil, Galeri2: http://gallery.menalto.com Tipik bir senaryo galeri ana sayfasına gitmem ve küçük resimlerden hiçbirinin görünmemesi, hata günlüğünde yeni bir bölümleme hatası hatası seti.

Bu yazılımın göreceli karmaşıklığı göz önüne alındığında, özellikle basit hata ayıklama biçimleri için uygun değildir. Kodda dolaşıp tam olarak ne olduğunu görebilmek istiyorum. Bunu yapmak için şimdiye kadar gördüğüm "Çözümler", "nispeten ağrısız" dan oldukça uzaktı.

Gallery2'yi bu sunucuda (LAMP yazılım paketlerinin önceki sürümleri) ve diğer sunucularda başarıyla kullandım, bu nedenle mevcut yapılandırmamda hatalı bir şey olduğunu varsayıyorum, ancak hatanın nerede olduğunu görmeden tamir et ya da çalış.

3
S. W.

http://sourceforge.net/tracker/index.php?func=detail&aid=1692166&group_id=7130&atid=1071 ve http://gallery.menalto.com/) adresine bakmanızı önerebilir miyim? düğüm/62436 # comment-22857 ?

Apache_setenv kullanımı ya da URL'yi iki kez gziplemede yaygın sorunlar var gibi görünüyor (senaryoya bağlı olarak - eskilerin görünmemesi daha küçük görünüyor):

Sorunun, mod_deflate’in, bazı sistemlerde bozulmalara neden olacak şekilde, URL’yi temel alan verileri ikinci kez gziplemeye çalıştığını düşünüyorum. Gönderdiğimiz dosyaları almamalarını söylemek, bu durumda yardımcı olur.


PHP'de bir hata olabilir. Apache_setenv () işlevini kullanarak devre dışı bırakmak için config.php'nize $gallery->setConfig('apacheSetenvBroken', 1); eklemeyi deneyin

Bunu takdir ettiğiniz, sorduğunuz sorunun cevabı değil (kullanmanın ötesinde Zend Framework eklentileri veya komut satırıyla php ve gdb PHP'de segfaults hata ayıklamayı bilmiyorum) ama yardımcı olabilir.

2
Metalshark

PHP segfaults hatalarını ayıklamak için normal olarak yeni bir .php dosyası (ana kodunuzla çakışmaması için) yapacağınız gibi (şöyle çağırıyor: my_first_debugger.php):

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

Ardından gdb php komutunu çalıştırın. Eğer gdb kurulmamışsa veya gdb/php ikili dosyaları yolunuzda değilse, hatalar olacaktır, bu yüzden gereken her şeyi kurmak için YaST2 kullanın (php için geliştirme/hata ayıklama kütüphanelerini alın, genellikle hata ayıklama sembollerini de ekleyin).

Gibi çıktı alırsınız:

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) 

Sonra sadece komut satırında run my_first_debugger.php yapın.

(no debugging symbols found) gibi mesajlar varsa -dev ve -dbg paketlerini arayın veya çağrılan işlevin adını göremeyebilirsiniz.

0
Metalshark