Errori Compilazione Script

Nel mio programma ho creato l’ oggetto xojoscript per l’ esecuzione dei piccoli programmi che interagiscono con il programma principale.
Quando eseguo la compilazione senza ottimizzazione tutto funziona bene mentre se l’ ottimizzazione High o Low il programma si blocca con la finestra di window che indica che il programma ha smesso di funzionare. (Il debug di xojo non interviene)
Quale potrebbe essere il problema ?

Seconda domanda:
In caso di un errore di sintassi, se l’ errore non indicato nel dictionary il programma si blocca nonostante abbia messo nella sub try - catch - ed end try.
Come posso evitare il blocco in questo caso ?

Il problema dell’ottimizzazione risolto nella prossima versione.

Per la seconda domanda, potresti fare un esempio?

Ecco i miei tentativi:
1-

[code]Function ErrorDescr(code as xojoscript.errors) as string
Dim StringError as String
Static errors As New Dictionary( _
XojoScript.Errors.Syntax: “Syntax does not make sense.”, _
XojoScript.Errors.TypeMismatch: “Type mismatch.”, _
XojoScript.Errors.ParserStackOverflow: “The parser’s internal stack has overflowed.”)

try
StringError = errors.value( code )
catch
StringError =“Errore non nel dictionary”
end try
Return StringError
end function[/code]

In questo caso “try” non interviene in caso d’ errore

2-

[code]Function ErrorDescr(code as xojoscript.errors) as string
Dim StringError as String
Static errors As New Dictionary( _
XojoScript.Errors.Syntax: “Syntax does not make sense.”, _
XojoScript.Errors.TypeMismatch: “Type mismatch.”, _
XojoScript.Errors.ParserStackOverflow: “The parser’s internal stack has overflowed.”)

Exception err as RuntimeException
If err IsA KeyNotFoundException then
StringError = “Errore non nel dictionary”
else
StringError = errors.value( code )
end if
Return StringError
end function[/code]

Che ci sia l’ eccezione oppure no la funzione mi restituisce una string vuota. (almeno l’ errore viene intercettato)

Ho provato il metodo 1 e funziona correttamente.

probabilmente sbagli la chiamata…

Ho provato a modificare un po’ il programma ma l’errore non viene bloccato.
E’ possibile che se la chiamata della funzione avviene tramite evento questo dia problemi ?

Di seguito l’ evento che richiama la funzione:

(Evento xojoscript in caso di errore nella compilazione)

[code]Function CompilerFault(Sender as xojoscript,Location as XojoScriptLocation,Error as XojoScript.Errors,ErrorInfo As Dictionary) As Boolean

'Nota:
’ “CompilerErrorDescription” una variabile string globale
Try
CompilerErrorDescription = ErrorDescr(error)
Catch
End try
End Function[/code]

Hai provato la chiamata passo passo?
La versione di ErrorDesc con il try (la prima) viene chiamata correttamente
Ma nella tua compilerFault non vedo come ti accorgi se la chiamata avviene

Se non vuoi fare lo step usa il system.debuglog e guarda nel pannello relativo la sequenza dei messaggi

ps ovviamente nell’oggetto Xojoscript nell’evento compilerError hai inserito almeno
return compilerFault(me,location,error,errorInfo)

Siccome creo in modo dinamico l’ oggetto xojoscript (XojoSpt) ho creato la gestione dell’ evento associandolo alla funzione CompilerFault passandogli tutti gli elementi Sender, location,…)

AddHandler XojoSpt.CompilerError, addressof CompilerFault

Ribadisco che se uso try e non ci sono errori la funzione mi restituisce correttamente la stringa con la descrizione dell’ errore.

Forse dovresti inviarmi un piccolo progetto dove mi mostri il problema.
Ho ricostruito la cosa come descritta e funziona.

Il progetto “test” lo trovi qui:

… e restituisce la stringa “errore non identificato” come richiesto

Quale problema riscontri?

Questa la schermata di errore del debug:
Immagine errore

Se pu servire…
Versione Xojo 2015r4.1
OS: Windows 10 64 bit

Ora ho capito il tuo problema!
Nel menu Project hai selezionato Break On Exceptions.

Per cui il debugger attiva l’eccezione, e fa il break del programma in modo che la puoi controllare.
A questo punto basta che premi il pulsante continua (il triangolo nero) e il tuo codice prosegue.

Se sei sicuro della gestione (ovvero non vuoi che si blocchi perch funziona come previsto) basta che all’inizio del metodo inserisci:

#Pragma BreakOnExceptions False

Ha validit solo per il metodo e quindi nel resto del programma il debugger continuer a fermarsi in caso di eccezioni
Se vuoi ripristinare il debugger per le eccezioni all’interno dello stesso metodo , superata la parte che gestisci correttamente, basta inserire #Pragma BreakOnExceptions Auto che imposta il break come definito dal menu.

Come vedi non ti dico di deselezionare la voce del menu perch in debug utilissima.

Il problema era quello!!!
Grazie per il supporto !