Internet con un nuovo punto di vista.
Il debug in PHP: la funzione debug_backtrace
Questo articolo è stato pubblicato 8 mesi fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Se riscontri errori o link rotti, puoi segnalarli inviando un commento.
Questa sera mi sono imbattuto in un incubo per molti programmatori: c’è un problema, ma dov’è la causa?
In PHP c’è una funzione della quale non tutti sanno l’esistenza, ma che tutti dovrebbero usare: sto parlando di backup_backtrace che permette di ricostruire l’intero percorso di una chiamata.
Vediamo qualche esempio.
Un problema in una funzione
Un esempio concreto dell’utilizzo di backup_backtrace è in una funzione chiamata. Supponiamo di avere la seguente funzione PHP:
function query ($post_query) {
mysql_query($post_query);
if (strlen(mysql_error()) > 0) {
$backtrace = debug_backtrace();
$backtrace[0][file] = explode('\\', $backtrace[0][file]);
echo 'Attenzione! Query non valida <i>'
.$backtrace[0][file][count($backtrace[0][file]) - 1].':'.$backtrace[0][line]
.'</i> '.$post_query.' (<i>'.mysql_error().'</i>)<br>';
return 0;
} else
return 1;
}
In questo caso l’uso di debug_backtrace è lampante: se la query genera un errore, prende il nome del file senza il percorso (riga 5 e riga 7), la linea che ha generato la chiamata alla funzione query e li visualizza insieme ad un messaggio di errore (riga 6), alla query passata ed all’errore in dettaglio (riga 8).
Avendo, per esempio il seguente codice nel file test.php:
query ('UPDATE table SET t1 = s WHERE id = 1');
verrà visualizzato un messaggio di errore come il seguente:
Attenzione! Query non valida test.php:42 UPDATE table SET t1 = s WHERE id = 1 (You have an error in your MySql syntax)
o simile.
Un altro esempio per errori generici
Un altro esempio di problema potrebbe verificarsi durante l’esecuzione di uno script all’interno di una certa pagina. Qui possiamo aggiungere manualmente un richiamo alla nostra funzione e visualizzare i dettagli per il debug. Lo script che può tornarci utile è il seguente:
function getDebugBacktrace () {
$NL = '<br />';
$dbgTrace = debug_backtrace();
$dbgMsg .= $NL."Inizio debug backtrace:$NL";
foreach ($dbgTrace as $dbgIndex => $dbgInfo)
$dbgMsg .= "\t livello ".$dbgIndex." @ ".$dbgInfo['file'].":".$dbgInfo['line']." -> ".$dbgInfo['function']."(".join(",",$dbgInfo['args']).")$NL";
$dbgMsg .= "Fine debug backtrace".$NL;
return $dbgMsg;
}
echo "Attenzione! Impossibile connettersi al database!";
echo getDebugBacktrace();
Con questo algoritmo verrà visualizzato il seguente output:
Attenzione! Impossibile connettersi al database!
Inizio debug backtrace:
livello 0 @ D:\Siti web\Senzatitolo-1.php:12 -> getDebugBacktrace()
Fine debug backtrace
Il tutto è molto utile per ricercare errori soprattutto in righe che producono uno stesso output.
La guida su php.net
Sempre disponibile c’è la guida della funzione online consultabile gratuitamente all’indirizzo www.php.net.
Avete altre idee di come utilizzare questa funzione? Scrivetele nei commenti
| Stampa l'articolo | Questo articolo è stato pubblicato da Giovdi il 1 dicembre 2009 alle 02:16, ed è archiviato come Programmazione: Web. Puoi seguire i commenti a questo post attraverso RSS 2.0. Puoi pubblicare un commento o segnalare un trackback dal tuo sito. |






