PHP betiklerinde nasıl hata ayıklarsınız? [kapalı]


403

PHP betiklerinde nasıl hata ayıklarsınız?

Hata Bildirimi gibi temel hata ayıklama işlemlerinin farkındayım. PHPEclipse içindeki kesme noktası hata ayıklaması da oldukça yararlıdır.

PhpStorm veya başka bir IDE hata ayıklamak için en iyi (hızlı ve kolay açısından) yolu nedir?




40
Bunun harika bir soru olduğuna inanıyorum! PHP hata ayıklamasına nasıl yaklaşacağınızı bilmiyorsanız, sorunuzu nasıl yazacağınızı bile bilmiyorsunuz, bundan nasıl daha hassas olacağını bilmiyorsunuz. Yani, Stack kurallarına uymayabilir, ama kesinlikle bize, yeni başlayanlara çok yardımcı olur!
Mihaela

1
php5.4'ten itibaren phpdbg ( phpdbg.com ) adı verilen yeni komut satırı arabirimi hata ayıklayıcısını tanıttı . PHP5.6 varsayılan phpdbg ile gelecek.
Ganesh Patil

1
Hiç XDebug'u duydunuz mu? :)
Pratik

Yanıtlar:


145

Bahsettiğiniz gibi hata ayıklama özelliklerine sahip bir Eclipse ortamı kurmak için Eclipse PDT'yi deneyin . Koda adım atma yeteneği, var_dump'ın eski yönteminden sonra hata ayıklamanın ve akışınızın nerede yanlış gittiğini görmek için çeşitli noktalara yazdırmanın çok daha iyi bir yoludur. Diğer tüm olsa başarısız ve tüm sahip olduğum SSH ve vim ben hala var_dump()/ die()nerede kod güneye gider bulmak için.


35
Bu işlevi kullanmalısınız: kill ($ data) {die (var_dump ($ data)); } Bu 10 karakter yazarak kaydeder, şimdiye kadar tbh yazdım en iyi işlevi :)
AlexMorley-Finch


2
"Var_dump" ı güzelleştirmenin bir yolu var mı?
RPDeshaies

6
@ AlexMorley-Finch Seni yükseltiyorumkill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
Francisco

2
İnanılmaz Web Arşivi ile bağlantı "kurtarılabilir" , son kontrol tarihi 7 Mayıs '15.
Gruber


38

Bu benim küçük hata ayıklama ortamım:

error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');

function assert_callcack($file, $line, $message) {
    throw new Customizable_Exception($message, null, $file, $line);
}

function error_handler($errno, $error, $file, $line, $vars) {
    if ($errno === 0 || ($errno & error_reporting()) === 0) {
        return;
    }

    throw new Customizable_Exception($error, $errno, $file, $line);
}

function exception_handler(Exception $e) {
    // Do what ever!
    echo '<pre>', print_r($e, true), '</pre>';
    exit;
}

function shutdown_handler() {
    try {
        if (null !== $error = error_get_last()) {
            throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
        }
    } catch (Exception $e) {
        exception_handler($e);
    }
}

class Customizable_Exception extends Exception {
    public function __construct($message = null, $code = null, $file = null, $line = null) {
        if ($code === null) {
            parent::__construct($message);
        } else {
            parent::__construct($message, $code);
        }
        if ($file !== null) {
            $this->file = $file;
        }
        if ($line !== null) {
            $this->line = $line;
        }
    }
}

2
Teşekkür ederim. Bu benim günümü kurtardı. (Sadece bu E_STRICT'i kaldırmak zorunda kaldım)
Sec

4
assert_callcackheh
Madbreaks

32

Xdebug ve ağır böcek avı için Notepad ++ için DBGp eklentisi, hafif şeyler için FirePHP. Hızlı ve kirli? Hiçbir şey dBug'u yenemez .


DBGp eklentisi notepad ++ / xdebug'un geçerli sürümüyle çalışmaz ve düzeltmek için herhangi bir plan yoktur. Burada
Joe

26

XDebug geliştirme için gereklidir. Başka bir uzantıdan önce yüklüyorum. Herhangi bir hatada yığın izleri verir ve kolayca profil oluşturmayı etkinleştirebilirsiniz.

Bir veri yapısına hızlı bir bakış için kullanın var_dump(). Kullanmayın print_r()çünkü onu çevrelemeniz gerekir <pre>ve her seferinde yalnızca bir varyasyonu yazdırır.

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>

Gerçek bir hata ayıklama ortamı için bulduğum en iyi Komodo IDE ama maliyeti $$.


19

PhpEd gerçekten çok iyi. İşlevlerin içine / üzerine / dışına adım atabilirsiniz. Geçici kodu çalıştırabilir, değişkenleri inceleyebilir, değişkenleri değiştirebilirsiniz. İnanılmaz.


4
PhpEd kullandım ve NetBeans veya Eclipse gibi gerçek bir IDE ile karşılaştırıldığında bunun için hiçbir tür kelime yok, ne de bu yorum soruya yararlı bir şey eklemek yok. -1
siliconrockstar

PhpED Professional satın almadan önce IDE'lerin çoğunu (Zend, NetBeans ve Eclipse dahil) denedim çünkü bir buçuk mil ile en iyisiydi. Bu birkaç yıl önceydi, bu yüzden diğerleri o zamandan beri iyileşmiş olabilirdi, ancak o zamanlar çoğu Java ile yazılmış oldukları için acı vericiydi. (Benim için) çok açık bir şekilde en iyisi olduğu zaman, kararın beyinsiz olduğu birisinin nasıl "bunun için nazik sözler" olabileceğini anlamıyorum.
lm713

17

1) print_r () kullanıyorum. TextMate'de, 'pre' için buna genişleyen bir snippet'im var:

echo "<pre>";
print_r();
echo "</pre>";

2) Xdebug kullanıyorum, ancak GUI'yi Mac bilgisayarımda çalıştıramadım. En azından yığın izinin okunabilir bir sürümünü yazdırır.


Eminim echo "</pre>" demek istediniz; sonunda.
altermativ

9
Ayrıca 'true' değerini işleve ileterek dize döndürmesini sağlayabilirsiniz. Bunu yapabileceğiniz anlamına gelir:echo '<pre>', print_r($var, true), '</pre>';
DisgruntledGoat


16

Dürüst olmak gerekirse, değişkenleri yazdırmak için print ve print_r () birleşimi. Birçoğunun diğer daha gelişmiş yöntemleri kullanmayı tercih ettiğini biliyorum ama bunu en kolayı buluyorum.

Uni'de Mikroişlemci programlaması yapana kadar ve bunu bile kullanamayana kadar bunu tam olarak takdir etmediğimi söyleyeceğim.


Ben print_r yanı sıra baskı belirtilen sevindim, ben sorunu izole yardımcı olur, belirli bir noktaya yürütülen kod görmek için temel bir baskı kullanın.
Brad

Hem print hem de var_dump () kullanıyorum. Hata ayıklama iletileri ve bilgileri görüntülemek için baskı kullanın ve şeyler ilerledikçe değişkenlerin durumunu belirtmek için var_dump.
Joshua K

14

Xdebug , Derick Rethans tarafından, çok iyidir. Bir süre önce kullandım ve kurulumu o kadar kolay değildi. İşiniz bittiğinde, onsuz nasıl başardığınızı anlamayacaksınız :-)

Zend Developer Zone (Linux'a kurulum daha kolay görünmüyor) ve hatta hiç kullanmadığım bir Firefox eklentisi hakkında iyi bir makale var .


2
Bu sadece sinir bozucu yükleme değil. Xdebug'u Eclipse ile çalışacak şekilde yapılandırmak bir kabus olabilir. Xdebug'u CentOS 5'e yükleyebildim, ancak EclipsePDT + Xdebug işbirliği yapmak istemiyor :(
Jahangir


11

NetBeans'ı XDebug ve Easy XDebug FireFox Eklentisi ile kullanıyorum

Eklenti, MVC projelerinde hata ayıkladığınızda önemlidir, çünkü XDebug'un Netbeans'te normal şekilde çalışması dbug oturumunu url yoluyla kaydetmektir. Eklenti FireFox'a yüklendiğinde Netbeans proje özelliklerinizi -> Yapılandırmayı Çalıştır -> Gelişmiş'i seçip "Web Tarayıcısını Açma" yı seçersiniz Artık kesme noktalarınızı ayarlayabilir ve hata ayıklama oturumunu her zamanki gibi Ctrl-F5 ile başlatabilirsiniz . FireFox'u açın ve kesme noktalarını izlemeye başlamak için sağ alt köşedeki Eklenti simgesine sağ tıklayın. Kod kesme noktasına ulaştığında duracaktır ve değişken durumlarınızı ve çağrı yığınını inceleyebilirsiniz.



9

PhpEdit yerleşik bir hata ayıklayıcı vardır, ancak genellikle echo (); ve print_r (); eski moda yolu !!


8

IDE'nin (PhpEd) hata ayıklama özelliğini kullandığımı anlamak için print_r / echo kullanmak için çok zaman harcayan gerçekten cesur problemler için. Kullandığım diğer IDE'lerin aksine, PhpEd hemen hemen hiç kurulum gerektirmez. karşılaştığım herhangi bir sorun için kullanmamamın tek nedeni, ağrının yavaş olması. Yavaşlık PhpEd veya herhangi bir php hata ayıklayıcı özgü olduğundan emin değilim. PhpEd ücretsiz değil ama yine de açık kaynak hata ayıklayıcılarından birini (daha önce bahsedilen XDebug gibi) kullandığına inanıyorum. PhpEd ile yarar, yine, geçmişte gerçekten oldukça sıkıcı bulduğum hiçbir kurulum gerektirmemesidir.


2
PHPEd hata ayıklayıcı aslında PHPEd yazan aynı adam tarafından yazılmıştır ve eminim açık kaynak değildir. En azından PHPEd kaynak ile birlikte gelmez, bunun yerine .so ve .dll dosyalarını derler.
Artem Russakovskii

4

Manuel hata ayıklama benim için genellikle daha hızlıdır var_dump()ve debug_print_backtrace()mantığınızı devreye sokmak için ihtiyacınız olan tüm araçlardır.


3

Bir dereceye kadar, şeylerin güneye nereye gittiğine bağlı. İzole etmeye çalıştığım ilk şey bu, sonra da echo / print_r () yöntemini gerektiği gibi kullanacağım.

Not: print_r () işlevine ikinci bir argüman olarak true iletebileceğinizi biliyorsunuz ve çıktıyı yazdırmak yerine döndürecek mi? Örneğin:

echo "<pre>".print_r($var, true)."</pre>";

2
Ben sadece hata ayıklama denilen bir işlev sarın. O zaman ben debug ($ var);
jdelator

3

Rails mümkün olmadığında genellikle CakePHP kullanıyorum. Hataları ayıklamak için genellikle error.logtmp klasöründe bulurum ve komutla terminalde kuyruklarım ...

tail -f app/tmp/logs/error.log

Eğer sen-ebilmek kullanma orta kodu bir şey çıktı istiyorsanız, oldukça kullanışlı olan, pasta kek üzerinden çalışan iletişim veriyor.

$this->log('xxxx');

Bu genellikle neler olup bittiğine dair iyi bir fikir verebilir.



2

Komodo IDE, remore hata ayıklama için bile xdebug ile iyi çalışır. Minimum miktarda yapılandırmaya ihtiyaç duyar. İhtiyacınız olan tek şey, Komodo'nun bir kesme noktasında kod boyunca adım adım yerel olarak kullanabileceği bir php sürümüdür. Komodo projesine içe aktarılan komut dosyanız varsa, bir java programında hata ayıklamak için eclipse içinde nasıl ayarlayacağınızı fareyle tıklatarak kesme noktaları ayarlayabilirsiniz. Uzaktan hata ayıklama, doğru bir şekilde çalışmasını sağlamak için açıktır (MAC veya linux masaüstünde olup olmadığını yapılandırmak oldukça kolay olan yerel bir hata ayıklama kurulumundan daha uzak URL'yi çalışma alanınızdaki bir php komut dosyasıyla eşlemeniz gerekebilir) .



2

Kodlama yaparken size sayısız saat kazandırabilecek birçok PHP hata ayıklama tekniği vardır. Etkili ancak temel bir hata ayıklama tekniği, hata raporlamayı basitçe açmaktır. Biraz daha gelişmiş bir başka teknik, aslında ekranda olup bitenleri görüntüleyerek daha zor hataları saptamanıza yardımcı olabilecek baskı ifadelerinin kullanılmasını içerir. PHPeclipse, yaygın sözdizimi hatalarını vurgulayabilen ve kesme noktalarını ayarlamak için bir hata ayıklayıcı ile birlikte kullanılabilen bir Eclipse eklentisidir.

display_errors = Off
error_reporting = E_ALL 
display_errors = On

ve ayrıca kullanılmış

error_log();
console_log();

1

Bir üretim ortamında, ilgili verileri sunucunun hata günlüğüne error_log () ile kaydederim.


ve kuyruk daha -f ... harika çalışıyor
markus_p

1

Yerleşik hata ayıklayıcı ile tutulma için zend studio kullanıyorum. Xdebug ile tutulma pdt ile hata ayıklama ile karşılaştırıldığında hala yavaş. Umarım bu sorunları düzeltirler, son sürümlerde hız artmıştır, ancak yine de şeylere adım atmak 2-3 saniye sürer. Zend firefox araç çubuğu işleri gerçekten kolaylaştırır (sonraki sayfada, geçerli sayfada vb. Hata ayıklama). Ayrıca, kodunuzu kıyaslayacak ve pasta grafikler, yürütme zamanı vb. Sağlayacak bir profil oluşturucu sağlar.


1

Hataların çoğu, sadece var_dumpbazı temel değişkenleri girerek kolayca bulunabilir , ancak açıkçası ne tür bir uygulama geliştirdiğinize bağlıdır.

Daha karmaşık algoritmalar için adım / kesme noktası / izleme işlevleri çok yararlıdır (gerekli değilse)


1

PHP DBG

SAPI modülü olarak uygulanan Interactive Stepthrough PHP Debugger, kodunuzun işlevselliğini veya performansını etkilemeden çevre üzerinde tam kontrol sahibi olmanızı sağlar. PHP 5.4+ için hafif, güçlü, kullanımı kolay bir hata ayıklama platformu olmayı hedefliyor ve PHP 5.6 ile birlikte geliyor.

Özellikler şunları içerir:

  • Adım Adım Hata Ayıklama
  • Esnek Kesme Noktaları (Sınıf Yöntemi, İşlev, Dosya: Çizgi, Adres, Opcode)
  • Yerleşik eval () ile PHP'ye Kolay Erişim
  • Yürütülmekte Olan Kodlara Kolay Erişim
  • Userland API'sı
  • SAPI Agnostic - Kolay Entegre
  • PHP Yapılandırma Dosyası Desteği
  • JIT Süper Globals - Kendi Ayarlayın !!
  • İsteğe bağlı okuma hattı Desteği - Konforlu Terminal Kullanımı
  • Uzaktan Hata Ayıklama Desteği - Birlikte verilen Java GUI
  • Kolay operasyon

Ekran görüntülerine bakın:

PHP DBG - Stepthrough Debugging - ekran görüntüsü

PHP DBG - Stepthrough Debugging - ekran görüntüsü

Ana sayfa: http://phpdbg.com/

PHP Hatası - PHP için daha iyi hata bildirimi

Bu, PHP komut dosyalarınızda hata ayıklamak için kitaplığı (aslında bir dosya) kullanmak çok kolaydır.

Yapmanız gereken tek şey aşağıdaki gibi bir dosya eklemektir (kodunuzun başında):

require('php_error.php');
\php_error\reportErrors();

Ardından tüm hatalar size geri izleme, kod içeriği, işlev bağımsız değişkenleri, sunucu değişkenleri vb. Gibi bilgiler verir. Örneğin:

PHP Hatası |  PHP için Hata Bildirimi Geliştir - backtrace ekran görüntüsü PHP Hatası |  PHP için Hata Bildirimi Geliştir - backtrace ekran görüntüsü PHP Hatası |  PHP için Hata Bildirimi Geliştir - backtrace ekran görüntüsü

Özellikler:

  • önemsiz, sadece bir dosya
  • normal ve ajaxy istekleri için tarayıcıda görüntülenen hatalar
  • AJAX istekleri duraklatılarak otomatik olarak yeniden çalıştırılabilir
  • hataları olabildiğince katı hale getirir (kod kalitesini teşvik eder ve performansı artırma eğilimi gösterir)
  • kod yığınlarını tüm yığın izlemesi boyunca kodlama
  • daha fazla bilgi sağlar (tam işlev imzaları gibi)
  • sadece yanlış olan bazı hata mesajlarını düzeltir
  • sözdizimi vurgulama
  • güzel görünüyor!
  • özelleştirme
  • manuel olarak açma ve kapatma
  • hata bildirmeden belirli bölümleri çalıştır
  • yığın izlemenizdeki kodu vurgulamaktan kaçınmanıza izin veren dosyaları yoksay
  • uygulama dosyaları; bir hata oluştuğunda bunlara öncelik verilir!

Ana sayfa: http://phperror.net/

GitHub: https://github.com/JosephLenton/PHP-Error

Çatalım (ekstra düzeltmelerle): https://github.com/kenorb-contrib/PHP-Error

DTrace

Sisteminiz DTrace dinamik izlemeyi (OS X'te varsayılan olarak yüklüdür) destekliyorsa ve PHP'niz , varsayılan olarak olması gereken DTrace probları etkin ( --enable-dtrace) ile derlenmişse , bu komut PHP betiğinde hata ayıklamanıza yardımcı olur:

sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'

Bu nedenle rc dosyalarınıza aşağıdaki takma ad eklendi (örn ~/.bashrc. ~/.bash_aliases):

alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'

Eğer takma hatırlanması kolay olan komut dosyasının iz olabilir: trace-php.

İşte daha gelişmiş dtrace betiği, sadece içine kaydedin dtruss-php.d, yürütülebilir ( chmod +x dtruss-php.d) yapın ve çalıştırın:

#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d

#pragma D option quiet

php*:::compile-file-entry
{
    printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}

php*:::compile-file-return
{
    printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}

php*:::error
{
    printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::exception-caught
{
    printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::exception-thrown
{
    printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::execute-entry
{
    printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::execute-return
{
    printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::function-entry
{
    printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::function-return
{
    printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::request-shutdown
{
    printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

php*:::request-startup
{
    printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

Ana Sayfa: GitHub'da dtruss lambası

İşte basit kullanım:

  1. Çalıştırın: sudo dtruss-php.d.
  2. Başka bir terminal dönemde üzerinde: php -r "phpinfo();".

Bunu test etmek için, index.phpPHP yerleşik sunucusuyla herhangi bir doktora gidebilir ve çalıştırabilirsiniz:

php -S localhost:8080

Bundan sonra siteye şu adresten erişebilirsiniz: http: // localhost: 8080 / adresinden (veya sizin için uygun olan herhangi bir bağlantı noktasını seçebilirsiniz). Buradan izleme çıktısını görmek için bazı sayfalara erişin.

Not: Dtrace varsayılan olarak OS X'te mevcuttur, Linux'ta muhtemelen dtrace4linux'a ihtiyacınız vardır veya diğer alternatifleri kontrol edin .

Bkz: PHP ve DTrace kullanma at php.net


SystemTap'ı

Alternatif olarak, SystemTap SDT geliştirme paketini (ör. yum install systemtap-sdt-devel ) .

İşte all_probes.stpSystemTap ile çalışan bir PHP betiği süresince tüm temel PHP statik prob noktalarını izlemek için örnek script ( ):

probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
    printf("Probe compile__file__entry\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
    printf("Probe compile__file__return\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
    printf("Probe error\n");
    printf("  errormsg %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
    printf("Probe exception__caught\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
    printf("Probe exception__thrown\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
    printf("Probe execute__entry\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
    printf("Probe execute__return\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
    printf("Probe function__entry\n");
    printf("  function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
    printf("Probe function__return: %s\n", user_string($arg1));
    printf(" function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
    printf("Probe request__shutdown\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
    printf("Probe request__startup\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}

Kullanımı:

stap -c 'sapi/cli/php test.php' all_probes.stp

Bkz: php.net adresinde PHP DTrace Statik Sondalar ile SystemTap Kullanımı


0

Print_r () için +1. Bir nesnenin veya değişkenin içeriğini boşaltmak için kullanın. Daha okunabilir hale getirmek için, bir ön etiketle yapın, böylece kaynağı görüntülemenize gerek kalmaz.

echo '<pre>';
print_r($arrayOrObject);

Ayrıca var_dump ($ thing) - bu, alt türlerin türünü görmek için çok yararlıdır


Genişletilmiş bir sürümü burada bulabilirsiniz devarticles.in/php/useful-function-to-output-debug-data-in-php
Arvind K.


0

Soruna bağlı olarak yankı testleri ile karıştırılmış bir hata_raporlama (E_ALL) kombinasyonunu seviyorum (hatalı satır / dosya bulmak için hata initally oldu; BİLMEK her zaman satır / dosya php size söyler değil?), IDE brace eşleştirme ("Ayrıştırma hatası: sözdizimi hatası, beklenmeyen $ end" sorunlarını çözmek için) ve print_r (); çıkış; dökümler (gerçek programcılar kaynağı görüntüler; p).

Ayrıca phpdebug'u (checkforforge) "memory_get_usage ();" ile yenemezsiniz. ve "memory_get_peak_usage ();" sorunlu alanları bulmak için.


0

Kodda ilerlerken değişken değişim değerlerini izleyebileceğiniz entegre hata ayıklayıcılar gerçekten harika. Ancak, sunucuda yazılım kurulumu ve istemcide belirli miktarda yapılandırma gerektirirler. Her ikisi de iyi çalışır durumda tutmak için periyodik bakım gerektirir.

Bir print_r yazmak kolaydır ve herhangi bir kurulumda çalışacağı garanti edilir.


0

Genellikle dosyaya kaydetmek, hata ayıklama bilgilerini saklamak ve sonunda ortak bir altbilgiye yeniden yazdırmak için özel bir günlük işlevi oluşturmayı bulurum.

Ayrıca, bu tür hata ayıklamanın yarı otomatik olması için ortak İstisna sınıfını geçersiz kılabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.