Devre dışı bırakılması Xdebug en damping yakaladı istisnalardan

2 Cevap php

Varsayılan olarak Xdebug bakılmaksızın yakalanmış olup olmadığını herhangi bir istisna dökümü:

try {
    throw new Exception();
}
catch (Exception $e) {
}
echo 'life goes on';

XDebug etkin ve varsayılan ayarları bu kod parçası olacak (güzel biçimlendirilmiş) aşağıdaki gibi aslında çıkış şey ile:

( ! ) Exception: in /test.php on line 3 Call Stack
#   Time    Memory  Function    Location 1  0.0003  52596   {main}( )   ../test.php:0
life goes on

Bu davranışı devre dışı bırakmak ve sadece yakalanmamış istisnalar damping olması mümkün mü?

Şimdiden teşekkürler.

UPDATE: Ben xdebug.show_exception_trace varsayılan olarak devre dışıdır çünkü bu, bir hata olduğu sonucuna varmak üzereyim henüz beklendiği gibi Ubuntu 9.10 üzerinde PHP 5.2.10 ile Xdebug V2.0.5 kullanarak (davranmaz .)

2 Cevap

xdebug.show_exception_trace seçeneğini (varsayılan olarak etkin değil unutmayın) değiştirin.

xdebug.show_exception_trace

Türü: tamsayı, Varsayılan değer: 0

Bu ayarı 1 olarak ayarlandığında bir durum ortaya olduğunda, Xdebug bir yığın izlemesi gösterecektir - Bu durum aslında yakalanmış olsa bile.

Kod isim alanlı ise, catch bloğu başvurmalıdır /Exception - with the backslash - hiçbir eğik çizgi varsa o PHP geçerli ad Exception arayacaktır. Bu genellikle başarısız olur ve yakalanmamış istisna Xdebug geçirilir.

Aşağıdaki kod Xdebug için istisna geçer:

namespace foo;

try {
    new \PDO(0);
} catch (Exception $e) {
    echo "Caught!";
}
// Fatal error: Uncaught exception...

İstisna önce ters eğik çizgi ekleme bakmak (ve bulmak) Exception küresel ad olacaktır:

namespace foo;

try {
    new \PDO(0);
} catch (\Exception $e) {
    echo "Caught!";
}
// Exception caught correctly

Elle atma istisnalar (yukarıda PDO'yu kullanılan neden olan) kafa karıştırıcı olabilir. Biz mevcut ad bir özel durum atmak için çalışırsanız, PHP durum yok yok söyler:

namespace foo;

try {
    throw new Exception();
} catch (Exception $e) {
    echo "Caught!";
}
// Fatal error: Class 'foo\Exception' not found

Catch bloğunda global referans olmadan küresel bir istisna atıyor farklı başarısız:

namespace foo;

try {
    throw new \Exception();  // global Exception
} catch (Exception $e) {
    echo "Caught!";
}
// Fatal error: Uncaught exception 'Exception' in...

Tüm bunların ışığında, her zaman bir ters eğik çizgi ile Catch'in Exception öneki için muhtemelen iyi bir fikir.

namespace foo;

try {
    throw new \Exception();
} catch (\Exception $e) {
    echo "Caught!";
}
// Exception caught correctly