| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
ErrorHandler debug-tarkoituksiinEzku 17.10.05 21:47 Ottaako PHP:n virheenhallinta joskus päähän, kun et tiedä missä tilanteessa virhe varsinaisesti tapahtui? Tästä helpotusta. Näyttää virheille ja nappaamattomille Exceptioneille helpottavan backtracen. Exception-osa on PHP5:lle.
/** * Uncatched exceptions handler. * @param object Exception */ function ExceptionHandler($e) { echo "<strong>". get_class($e) ."</strong> #". $e->getCode() .": ". $e->getMessage() ."<br />\n", "In <strong>". $e->getFile() ."</strong> ", "on line <strong>". $e->getLine() ."</strong><br />\n", "<p>Backtrace: </p><pre>".$e->getTraceAsString() ."</pre>"; } /** * Error handler, providing rigorous backtrace information. * @param int error type * @param string error message * @param string file name * @param string line number */ function ErrorHandler ($error_type, $error_message, $file, $line) { static $error_types = array ( 1 => 'E_ERROR', 2 => 'E_WARNING', 4 => 'E_PARSE', 8 => 'E_NOTICE', 16 => 'E_CORE_ERROR', 32 => 'E_CORE_WARNING', 64 => 'E_COMPILE_ERROR', 128 => 'E_COMPILE_WARNING', 256 => 'E_USER_ERROR', 512 => 'E_USER_WARNING', 1024 => 'E_USER_NOTICE', 2047 => 'E_ALL', 2048 => 'E_STRICT' ); // Check error type against error reporting level. if ($error_type & error_reporting()) { echo "<strong>".$error_types[$error_type]."</strong>: ".$error_message."<br />\n", "In <strong>".$file."</strong> ", "on line <strong>".$line."</strong><br />\n", "<p>Backtrace:</p><pre>"; $backtrace = debug_backtrace(); // First is always ErrorHandler, skip it array_shift($backtrace); $i = -1; foreach ($backtrace as $trace) { $args = array(); if (isset($trace['args'])) { foreach ($trace['args'] as $a) { switch (gettype($a)) { case 'integer': case 'double': $args[] = $a; break; case 'string': $a = htmlspecialchars(substr($a, 0, 64)) .((strlen($a) > 64) ? '&hellip' : ''); $args[] = "\"$a\""; break; case 'array': $args[] = 'Array('.count($a).')'; break; case 'object': $args[] = 'Object('.get_class($a).')'; break; case 'resource': $args[] = 'Resource('.strstr($a, '#').')'; break; case 'boolean': $args[] = $a ? 'True' : 'False'; break; case 'NULL': $args[] = 'NULL'; break; default: $args[] = 'UNKNOWN'; } } } echo '#'.++$i.' ', $trace['file'].'('.$trace['line'].'): ', (isset($trace['class']) ? $trace['class'].$trace['type'] : ''), $trace['function'].'('.implode(', ',$args).')', "\n"; } echo '#'.++$i." {main}</pre>"; exit; } } set_error_handler ('ErrorHandler'); set_exception_handler ('ExceptionHandler'); eis 22:14 17.10.05 Joululahjatoivelista/ideointipalsta, osa 1: Itse toteutin saman muuten tähän suuntaan, mutta niin, että handler tekee tiedostot/rivit linkeiksi, joita klikkaamalla errorhandler näyttää show_sourcen kyseisistä tiedostoista rivinumeroituna, scrollaa oikealle riville ja maalaa sen taustan mustaksi. Valitettavasti en saanut ulostuvasta htmlstä validia tai edes well-formedia (tagit tuppaavat mennä ikävästi sisäkkäin) joten oikean rivin väritys ei toimi kuin osalla selaimista ja niissäkin vähän bugittaen.. Jos tähän yllämainitun toiminnallisuuden joku jaksaisi vielä väkertää, olisi aika hienoa. Mutta jees, tällaiset ovat oikeasti tarpeen. |
![]() Haku
|