Intercettazione errore tra due sub annidate

giovedì 12 aprile 2012 - 18.46
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows XP  |  Visual Studio Express  |  MySQL 5.1  |  Firefox

ravalon Profilo | Expert

Salve ragazzi....

ho questo problema di sviluppo....
Io uso costrutti TRY-CATCH per intercettare gli errori....
Ora...ho una sub che all'interno ne richiama un'altra... quest'ultima restituisce un valore e ritorna alla prima sub...

Ho un errore che viene generato nella sub più interna, quella richiamata dalla prima....però l'intercettazione avviene nella sub primaria, quella chiamante, sebbene l'errore avvenga nella seconda....

Questo mi porta problemi nell'individuare l'errore tramite i log che faccio tracciare perchè mi indica che l'errore sta in una routine ed invece sta in un'altra...

Come posso fare in caso di annidamento (o anche più in generale) a far generare l'errore nella routine che effettivamente lo genera ??

Ho letto qualcosa in merito all'istruzione THROW ma non ho capito se fa al caso mio ne come usarla....

Gluck74 Profilo | Guru

metti un try-catch anche nella sub ed intercetti l'errore dove avviene effettivamente.
Se poi hai bisogno di rimandare l'errore alla chiamante (visualizzazione di messaggi, gestione di procedure, o qualsiasi altro motivo), allora usi l'istruzione throw per generare un nuovo errore però custom, ovvero dove scegli tu il messaggio da riamandare (e tutti gli altri dati come Source, Inner)

ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

ravalon Profilo | Expert

Ciao, grazie per la risposta...

il try-catch ce l'ho su entrambe le sub ma l'errore dalla sub interna viene passato alla cattura della sub più esterna.... non so come si usa il throw, mi puoi fare un esempio ?

Gluck74 Profilo | Guru

in verità l'errore avviene proprio nel punto in cui avviene. é casomai come gestisci le informazioni che ti può portare confusione.


>il try-catch ce l'ho su entrambe le sub ma l'errore dalla sub
>interna viene passato alla cattura della sub più esterna....
>non so come si usa il throw, mi puoi fare un esempio ?

ma se hai il try-catch anche nella sub, come fai a catturare l'errore solo nel chiamante? vuol dire che l'errore avviene nella sub ma fuori dal try-catch, ti torna?

ti faccio comunque un esempio:
protected void Chiamante() { ... ... try { subFunction("parametro"); } catch (Exception e) { ... } } protected void subFunction(string par) { try { ... } catch (Exception e) { //qui gestisco l'errore Exception MyErr = new Exception("Messaggio che voglio specificare, e); MyErr.Source = "MyLibrary/MyFunction"; throw MyErr; } }
Poi, se vuoi fare le cose ancora più precise,
ti costruisci una tua classe di eccezione, estendendo la classe base Exception, e dentro ci metti tutte le info che vuoi.

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

ravalon Profilo | Expert

Che stupido che sono....ho capito.... non uso proprio il tuo sistema ma il problema l'ho invididuato....

Avendo messo del codice PRIMA dell'instruzione TRY, non ci avevo pensato.... l'errore viene generato proprio in quel punto e non essendo dentro un gestore errori risale lo stack e lo passa al "controllo genitore"....ecco come mai...

Ti ringrazio molto per l'aiuto !



Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5