OpenLab Studio | >= 0.16.x |
OpenLab C | >= 0.16.x |
Linguaggi | C# |
Generale #
Gli errori, eccezioni, crash report e situazioni simili sono gestite dalla classe ErrorReport
. Questa classe svolge i seguenti compiti:
- Distribusce un collegamento con il logger tramite il metodo
getLog()
- Mostra il Crash report
- Fornisce un meccanismo di chiusura d’emergenza di OpenLab Studio in caso di errori irrecuperabili
E’ presente prativamente ovunque tramite la variabile errorManager
.
Eccezioni #
Quando si vuole lanciare un eccezione va usata la classe OLSException
che è stata derivata dalla classe standard Exception
. Qualsiasi eccezione che deve essere implementata va derivata da questa classe. All’interno la classe OLSException
è stato implementato un meccanismo che scrive nel log un messaggio di errore e lancia in automatico il crash report che mostra all’utente i dettagli dell’errore e, in base ai parametri passati all’eccezione, permette o meno di continuare con l’esecuzione del programma. Di seguito un esempio:
if(value<0){ throw new OLSException(errorManager, "value less then 0"); }
La chiamata sopra visualizzerà un crash report che permette di essere chiuso e continuare, e scriverà il messagio nel log.
try{ // write in file }catch(Exception e){ throw new OLSException(errorManager,e,"Error: write is not possible") }
in questo modo l’eccezione occorsa nella scrittura del file viene incartata all’interno di OLSException
.
In tutte le chiamate, passando true
come ultimo parametro, viene visualizzato un crash report che permette solamente la chiusura del programma.
Crash #
Quando si vuole lanciare un eccezione per un evento grave, non recuperabile, che costringa alla chiusura del programma usare la classe OLSCrash
. Funziona esattamente come OLSException
mostra un crash report che permette solo la chiusura del programma.
Emergency exit #
Sia nel caso venga lanciata un eccezione di tipo OLSException
, e l’utente scelga di non continuare(tasto Exit
) o che venga lanciata una di tipo OLSCrash
, viene eseguita la procedura di uscita d’emergenza. In qualsiasi punto sia accessibile l’error manager è possibile aggiungere un handler di uscita d’emergenza. Quando verrà lanciata l’uscita d’emergenza verranno eseguiti tutti gli handler e poi chiuso il programma con il valore di ritorno 9999
.
Questo meccanismo serve per evitare una chiusura incontrollata del programma e evitare incoerenze. Ad esempio nel caso in cui un modulo hardware abbia bisogno di una procedura di stop o altri casi in cui è necessaria la sicurezza che delle operazioni vengano eseguite prima della chiusura del programma in caso d’errore. Pe aggiungere un EmergencyExitHandler
usare il metodo addEmergencyExitHandler()
in questo modo:
errorManager.addEmergencyExitHandler( () => { // for exemple: send stop command to hardware module });