Değişken hata ayıklama fonksiyonunu php hangisini kullanıyorsunuz?

9 Cevap php

9 Cevap

Ben her zaman Xdebug genişletilmiş var_dump kullanın. Bu ayrıntılı çıktı bir sürü verir.

Bkz: http://xdebug.org/docs/display daha fazla bilgi için.

i oldukça dizi yapısı gibi (çünkü) print_r kullanabilirsiniz ... ancak sana (türleri gibi) biraz daha fazla bilgi var_dump vermek yok

$obj = (object) array(1, 2, 3);

// output of var_dump:
object(stdClass)#1 (3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

// output of print_r
stdClass Object
(
  [0] => 1
  [1] => 2
  [2] => 3
)

Ben bir dizi veya tek bir değer ile uğraşıyorum bağlı olarak bu özel işlevleri kullanabilirsiniz:

function show($array)
{
    echo '<pre>';
    print_r($array);
    echo '</pre>';
}

function prn($var)
{
    echo '<br/>' . $var . '<br/>';
}

Ben genelde ben sağ ekranda kolayca geçmesi böylece çıkışı biçimlendirmek gerek sona çünkü bu fonksiyonlar giderme basitleştirmek bulabilirsiniz.

Daha karmaşık sorun giderme için, biz belirli bir hata mesajı ile birlikte bir yığın izleme e-posta göndereceğiz İstisna sınıfının genişletilmiş bir sürümünü kullanın. Bu bana hem de ben tam olarak ne oluyor biliyor ki ben yaratılmış olursa olsun özel ileti hatası dahil edildi hangi dosyaları dahil edildi ve hangi çizgi veya çizgiler dahil edildi fonksiyonlarını verir. Sorun giderme bir katmanı için, biz de erişilen veritabanında bu hataları log.

Benim kod koymak ve sayfa (veya bir dosyada) yığın dökümü altbilgi tek çeşitli DebugPrint saklamak için sarıcı işlevleri bir çift ile birlikte sadece kullanıcı print_r.

Ben artık çok XDebug kullanmayı deneyin ...:-D

Tamam, kayıt için, benim küçük işlevleri ver ...

// Primitive debug message storage
// $level = "Info", "Warn", "Error", "Title"
function DebugPrint($toDump, $level = "Info") {
  global $debugMode, $debugDump, $debugCount;

  if ($debugMode != 'N') {
    $debugDump[$debugCount++] = "<div class='Dbg$level'>" . $toDump . "</div>\n";
  }
}

// Initialize debug information collection
$debugMode = 'N'; // N=no, desactivated, P=dump to Web page, F=dump to file
$debugSavePath = 'C:\www\App\log_debug.txt'; // If mode F
$debugDump = array();
$debugCount = 0;

// Primitive debug message dump
function DebugDump() {
  global $debugMode, $debugSavePath, $debugDump, $debugCount;

  if ($debugMode == 'F') {
    $fp = fopen($debugSavePath, "a"); #open for writing
  }
  if ($debugCount > 0) {
    switch ($debugMode) {
    case 'P':
        echo '<div style="color: red; background: #8FC; font-size: 24px;">Debug:<br />
';
        for ($i = 0; $i < $debugCount; $i++) {
            echo $debugDump[$i];
        }
        echo '</div>
';
        break;
    case 'F':
        for ($i = 0; $i < $debugCount; $i++) {
            fputs($fp, $debugDump[$i]);
        }
        break;
//~         default:
//~             echo "debugMode = $debugMode<br />\n";
    }
  }
  if ($fp != null) {
    fputs($fp, "-----\n");
    fclose($fp);
  }
}

// Pre array dump
function DebugArrayPrint($array) {
global $debugMode;

  if ($debugMode != 'N') {
    return "<pre class='ArrayPrint'>" . print_r($array, true) . "</pre>";
  } else return "";    // Gain some microseconds...
}

Faiz gerçek sayfasını yığılmayı kaçınarak, sayfanın sonuna çıkışını geciktirmek için olduğunu.

Eğer tarayıcı hataları gönderme önlemek istiyorum ama var_dump ve print_r avantajı istiyorsanız çıktı tamponunun bir göz atın:

ob_start();
var_dump($this); echo $that; print_r($stuff);
$out = ob_get_contents();
ob_end_clean();

user_error($out);

http://www.php.net/manual/en/book.outcontrol.php bazı iyi okuma

Sadece bir ifadenin bir bölümünü yazdırmak için yeteneği yani değişken dökümü fonksiyonların standart PHP uygulamaları, dan yoksun ben çok yararlı bir şey var.

İşte bu çözen bir fonksiyonudur:

function dump($val) {
    echo '<pre>'.var_export($val,true).'</pre>';
    return $val;
}

Şimdi ben sadece bu gibi olağan kod yürütme akışını engelleyemeyeceği vermeden değerini bilmek gerekir ifadenin etrafına bir işlev çağrısı koyabilirsiniz:

$a=2+dump(2*2);

Az bilinen * var_export kullanımı ile * Ben de işlem sonrası sonuç çıktı tamponlama uygulanması gereğini ortadan kaldırmıştır.

Eğer ikili bir cevap (GD kütüphanesi kullanan yani bir görüntü) oluşturmak, o zaman geçerli bir ayarlı başlığını kullanabilirsiniz:

header('X-eleg:'.serialize($yourstuff));

ve "casus" için Firefox için Http-header uzantısını kullanabilirsiniz.

print_r () genellikle, ancak var_dump () öncülleri için daha iyi bilgi sağlar.

Söyleniyor, ben Zend Sunucu Debugger ile benim actual hata ayıklama çoğu yok.

var_dump. XDebug o güzel (hiçbir etrafında <pre> etiketleri koymak zorunda) çıkış biçimleri ve renkleri yüklü.