Autore Topic: I moduli vanno inizializzati prima di utilizzare la classe error nello stesso?  (Letto 1055 volte)

Offline g.grandi

  • Gambero
  • **
  • Post: 51
    • Mostra profilo

Ciao a tutti.
Mi sono imbattuto in un problema al quale ho già trovato rimedio, ma giro la domanda a chi ne sa molto più di me. Ho un programma con alcune form in cui vorrei registrare eventuali errori di programmazione. Per non mettere una sub specifica in ogni form, ho pensato di usare un modulo con tale codice da richiamare alla bisogna. Il tutto funziona correttamente salvo il fatto che al primo errore che genero, non viene visualizzata nessuna informazione dalla classe error, mentre per i successivi, si. Per aggirare il problema, ho creato una sub nel modulo, che non fa nulla, e che vado a richiamare dalla Form_Open del form di avvio. Vi è una spiegazione a ciò?  ???
Ho allegato per completezza un esempio che riproduce il problema: entrambi i pulsanti della form generano un errore di divisione per zero che viene mostrato in console dalla sub del modulo. Se eseguo il programma con commentata la sub Form_Open, si presenta il problema; se rendo attiva tale sub, funziona correttamente.

Grazie
Giovanni


Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Ciao,
ho scaricato il tuo applicativo esemplificativo, e - dopo l'automatica conversione per Gambas 3 - l'ho provato sia lasciando la routine commentata che attivandola.
Ti segnalo che in entrambi i casi non ho avuto alcun problema.  :-\

  :ciao:
« Ultima modifica: 14 Dicembre 2012, 20:05:57 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline g.grandi

  • Gambero
  • **
  • Post: 51
    • Mostra profilo
Quindi, interpretando la tua risposta, capisco che quanto ho fatto è corretto ma non si spiega perchè dia quel problema sulla versione che uso io.

Grazie
Giovanni

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
...quanto ho fatto è corretto ma non si spiega perchè dia quel problema sulla versione che uso io.

Sembrerebbe, appunto, proprio così !  :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
L'ho provato anche io e deve essere un bug o similare di Gambas 2, perchè con G2 devi usare la sub fittizia perchè il programma funzioni, mentre in G3 non è necessaria.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Attenzione!

La cattura degli errori avviene tramite la classe statica Error, che contiene lo stato dell'ultima esecuzione del programma.
Se si mette una sub, o si richiama un metodo e/o funzione sulla catch dell'evento, si perdono le informazioni, perchè viene eseguito un'altro pezzo di programma.
L'unico modo per salvaguardare le informazioni di errore, è quella di salvarle immediatamente in variabili statiche e/o una classe statica, e pubblica.
In questo caso, chiamando la funzione statica, se non vengono effettuate operazioni al di fuori della sola cattura dei dati, la cosa funziona, altrimenti si ha lo stesso comportamento che hai rilevato.
Purtroppo, in gambas non vi è ancora modo di gestire la logica degli errori, e quindi tocca metterci una pezza così.
Un'altra cosa statica e noiosa, è quella dell'utilizzo dell'istruzione CATCH alla fine del metodo, che deve stare solo lì...

Offline g.grandi

  • Gambero
  • **
  • Post: 51
    • Mostra profilo

Chiedo aiuto su una cosa che non ho ancora digerito in Gambas.  :-[
Mi specificate spesso che una funzione (o una varibile) è STATIC per sottolineare che è molto particolare, ma da quel poco che ho trovato per documentarmi, non sono ancora riuscito a capire cosa comporta tale definizione. Io vengo dal QBasic e PWBasic dove tale definizione si usa all'interno di una sub per conservare il valore di una variabile anche al termine dell'esecuzione (END SUB) in modo che al successivo richiamo della stessa sub, potesse essere riutilizzata e non ridefinita. In Gambas tale tipo di comportamento non esiste e bisogna (almeno così ho fatto io) ricorrere ad una variabile di tipo PUBLIC all'interno della classe o modulo che contiene la sub in oggetto. Ma la definizione STATIC ??? ???

Giovanni

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »