2010-05-25 8 views
7

damping (güzel biçimlendirilmiş):Devre Dışı Bırakma Xdebug en olursa olsun yakalanmış olup olmadığına veya olmasın herhangi bir istisna dökümü varsayılan Xdebug tarafından yakalandı istisnalar

(!) 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 var mümkün mü?

Şimdiden teşekkürler.

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

cevap

9

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

xdebug.show_exception_trace

Tür: tamsayı, Varsayılan değer: 0 Bu ayar 1 olarak ayarlanır

, Xdebug bir özel duruma neden olduğunda bir yığın izleme gösterecektir - bu istisna olsa bile aslında yakalandı. ters eğik çizgi ile - - kodunuzu isim alanlı ise

+0

Bunun xdebug.show_exception_trace ile bir ilgisi olduğunu kabul ediyorum. Bence 0'a ayarlandığında yakalanan istisnaları görmezden gelmeliyiz, fakat bir şekilde bu açık bir şekilde devre dışı bırakıldığında bile işe yaramaz. – nuqqsa

+0

# php.pecl @ EFNet adresindeki Derick ile konuşun ya da http://bugs.xdebug.org/ adresindeki hata izleyiciyi kullanın. – Artefacto

+0

Bu son yorum cevabınızı tamamlar :) Bu hatayı bildirmek için kesinlikle bu hatayı bildireceğim hala 2.1.0RCx içinde yeniden üretin. Teşekkürler. – nuqqsa

1

, catch bloğu \Exception başvuruda bulunmalıdır hiçbir ters eğik çizgi varsa o zaman PHP geçerli ad alanında Exception arayacaktır. Bu genellikle başarısız olur ve yakalanmamış istisna Xdebug'a iletilir.

Aşağıdaki kod Xdebug istisna geçirir:

namespace foo; 

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

Elle atma istisnalar olabilir:

namespace foo; 

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

ters eğik çizgi ekleme genel ad Exception arayın (ve bulmak) olacak İstisna önce kafa karıştırıcı (bu yüzden yukarıda PDO kullandım). catch bloğunda global bir referans olmadan küresel bir istisna Fırlatma

namespace foo; 

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

farklı başarısız:

namespace foo; 

try { 
    throw new \Exception(); // global Exception 
} catch (Exception $e) { 
    echo "Caught!"; 
} 
// Fatal error: Uncaught exception 'Exception' in... 
biz Geçerli isim alanında bir özel durum atmak çalışırsanız, PHP orada yok bize İstisna söyler

Tüm bunların ışığında, her zaman yakalayıcının Exception'u bir ters eğik çizgi ile önek yapmak iyi bir fikirdir.

namespace foo; 

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