E 'possibile sfoltire lo stacktrace restituito per un'eccezione personalizzata in PHP

1

Sto lavorando su un progetto in PHP che esegue molte convalide di input e può generare classi di eccezioni personalizzate diverse in vari livelli dell'applicazione. Per rendere il codice del progetto più facile da leggere, ho spostato tutto il codice di convalida in metodi statici di una classe di validazione, che esegue il controllo e lancia l'eccezione appropriata se necessario. Il mio problema è che l'eccezione stacktrace visualizza l'intero stack di chiamate nella classe di validazione, ma ritengo che le informazioni extra non siano utili e serviranno solo a confondere qualcuno che cerca di eseguire il debug della posizione del problema reale. Dovrei semplicemente fare affidamento su messaggi di eccezione informativi o è possibile tagliare il registro di traccia in qualche modo.

    
posta leo 02.01.2012 - 21:57
fonte

2 risposte

2

Anche se tu potessi, non penso che dovresti rovinare la traccia dello stack. Mette a disagio il modello mentale del programmatore su come funzionano le eccezioni. Quando guardo la riga superiore di un'eccezione, mi aspetto di vedere un throw .

Ogni volta che fai qualcosa che non è "previsto", mi ci vuole tempo (cioè qualcuno che usi la tua biblioteca) per capire cosa sta succedendo. Mantenendo le sorprese al minimo, rendi più semplice e intuitivo l'uso della tua libreria.

Inoltre, sarei davvero veramente sorpreso se steste usando set_exception_handler da una libreria di validazione di input!

    
risposta data 02.01.2012 - 22:33
fonte
1

Una possibile soluzione alternativa sarebbe un gestore di eccezioni personalizzate del progetto, tramite set_exception_handler () , dove potresti ottenere la matrice di traccia da Exception::getTrace() e mostrare ciò che vuoi mostrare.

Ma non vedo veramente quale sia il problema, una traccia dello stack dovrebbe mostrare il percorso completo da dove vi trovate dove è stata lanciata l'eccezione. Non penso davvero che ci sia qualcosa di strano in questo.

Sebbene in realtà non risponda alla tua domanda, dai un'occhiata a xdebug , almeno prepara le tracce .

    
risposta data 02.01.2012 - 22:10
fonte

Leggi altre domande sui tag