Newsgroup: it.comp.www.php
Titolo: posizionarsi immediatamente sull'errore

quando si programma in php, come in tutti i linguaggi, � inevitabile 
incappare in vari errori, ad esempio come questo:
 
Notice: Undefined variable: test in c:\siti\doc\index.php on line 90
 
In questo caso e' necessario aprire il file indicato, posizionarsi sulla 
riga 90, e naturalmente capire e risolvere il problema.
 
Io programma in php da circa un anno, e sinceramente inizio a rompermi 
le scatole...
Ogni volta che si verifica un errore, mi devo portare manualmente sul 
punto critico, perdendo a volte anche quasi mezzo minuto.
 
Possibile che non ci sia un modo ad esempio, di far apparire l'errore 
sotto forma di link, su cui cliccandoci sopra si apre l'editor preferito 
(io uso Netbeans) e il cursore si posiziona immediatamente sul punto 
critico?
 
PS
 
Io provengo da 
vb.net
, dove gli errori comparivano direttamente 
nell'editor: un doppio click su uno di essi, e in un baleno il cursore 
ti balzava sul punto in cui dovevi intervenire.
Ma quello era per certi versi, un altro mondo...

 critico?
 
Non so Netbeans. In PHPStorm c'è un plugin che si integra con FirePHP 
(plugin per Chrome e Firefox) che dovrebbe fare proprio quello.
 
In Zend Studio hai l'integrazione con Zend Server: ti fa automaticamente 
il trace dell'errore e ti apre l'editor al punto giusto.
 
Forse in Netbeans puoi integrare il browser (cerca nella documentazione o 
tra le varie configurazioni) in modo da lanciare il browser direttamente 
nell'editor.
 
Personalmente non uso nessuno dei suddetti e continuo col "metodo 
manuale".
 
Bye.

Io mi sono fatto un protocollo personalizzato apposta per questo, nella mia funzione error handler mi stampa gli errori come link, ad esempio
<a href="komodo:/path/del/file:riga_errore">descrizione errore</a>
 
 
L'url è fatto apposta per komodo, ma credo che anche netbeans abbia un comando cli per aprire un file a una determinata riga.
 
 
 
Che sistema operativo usi?


 
windows 7, e google chrome come browser (ma volendo anche firefox)

 manuale".
 
se le cose da sistemare diventano dozzine, diventi matto se ogni volta 
devi individuale le coordinate manualmente.
 
Poi non so, forse non è ben organizzato il mio modo di lavorare, ma non 
penso... fare errori è inevitabile, soprattutto quando si devono 
cambiare certe strutture logiche (riorganizzare l'ereditarieta' delle 
classi, modificare nomi usandone di più appropriati, ecc.).
 
Purtroppo gli errori che quindi vengono generati in seguito a queste 
operazioni di riorganizzazione sono a decine, ma allo stesso tempo 
facilmente individuabili e risolvibili; però senza un buon sistema, che 
ti mette automaticamente il cursore nel punto focale, il lavoro diventa 
terribilmente lento e noioso

 windows 7, e google chrome come browser (ma volendo anche firefox)
 
allora non posso aiutarti, cerca su google come impostare i protocolli personalizzati di windows, e su come dire a netbeans di aprire il file da riga di comando

 Ma quello era per certi versi, un altro mondo...
 
In NetBeans non so come funziona ma in Eclipse c'è il plug-in XDEBUG che 
dovrebbe fare al caso tuo. Eclipse PDT di default già integra il debug 
per Zend ma con questo plugin puoi farlo anche per il resto di php.
 
link: 
http://www.webem-lab.it/programmazione/eclipse-debug-di-una-applicazione-php
 
 
XDEBUG per NetBeans(in fondo alla pagina):
http://netbeans.org/kb/docs/php/configure-php-environment-mac-os.html
 

 terribilmente lento e noioso
 
Il modo migliore e` di scrivere test unitari. Appena hai finito il 
refactoring lanci i test e vedi subito cosa hai rotto.
 
Bye.

 <a href="komodo:/path/del/file:riga_errore">descrizione errore</a>
 
ma come si fa a personalizzare l'url in questo modo?
Bisogna configurare apache?
Mi sembra di aver visto qualcosa per modificare l'aspetto di warning, 
errori, notice, ecc.
Ma non ricordo dove...

 
http://netbeans.org/kb/docs/php/configure-php-environment-mac-os.html
 
 
ancora non mi sono convertito al macchismo, e ne sono sempre piu' 
tentato, mi conviene?


http://it2.php.net/manual/en/function.set-error-handler.php
 
 
Occhio perchè per i Fatal Error c'è un trucchetto da fare con lo shutdown, al volo non me lo ricordo, ma se cerchi su google lo trovi

 ho visto.
 
Fra PHPStorm e Zend Studio cosa mi consiglieresti?
 
Al momento uso PHPEd 
 
 

 Occhio perch� per i Fatal Error c'� un trucchetto da fare con lo shutdown, al volo non me lo ricordo, ma se cerchi su google lo trovi
 
ecco quello che ho realizzato:
 
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) {
 
     echo "
         <hr />
         errno: $errno <br>
         errstr: $errstr <br>
         errfile: (un po' di privacy...) <br>
         errline: $errline<br>
     ";
}
 
function fatalErrorShutdownHandler() {
     $last_error = error_get_last();
 
     if ($last_error['type'] === E_ERROR) {
         // fatal error
         myErrorHandler(E_ERROR, $last_error['message'], 
$last_error['file'], $last_error['line']);
     }
}
 
set_error_handler('myErrorHandler');
register_shutdown_function('fatalErrorShutdownHandler');
 
/////////////////// test //////////////////////
 
function test(prova $param) {}
 
test(1234);
 
?>
 
ed ecco l'output:
 
errno: 4096
errstr: Argument 1 passed to test() must be an instance of prova, 
integer given, called in (un po' di privacy) on line 29 and defined
errfile: (un po' di privacy...)
errline: 27
 
 
Molto bene, tranne una cosa, cio� il messaggio di errore perch� � 
incompleto?
 
Argument 1 passed to test() must be an instance of prova, integer given, 
called in (un po' di privacy) on line 29 and defined
 
Quindi c'� una chiamata alla riga 29, e definita dove?
Alla riga 27... ma perch� non lo indica?
Il messaggio � troncato, perch�?

 tentato, mi conviene?
 
ad ogni modo non sono riuscito a capire se con NetBeans per windows, si 
puo' aprire un file da riga di comando, specificando anche la riga su 
cui posizionare il cursore

 Il messaggio ï¿½ troncato, perchï¿½?
 
Se non ricordo male l'error handler mostra solo l'ultimo evento, se vuoi scendere nella 'cronologia' guardati debug_backtrace()


 
ok grazie