Gambas-it

Gambas3 => Segnalazione bug => Topic aperto da: dex - 13 Marzo 2019, 03:06:24

Titolo: Errore di Bus
Inserito da: dex - 13 Marzo 2019, 03:06:24
Ciao Raga mi esce spesso questo errore.
di cosa si tratta?
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 13 Marzo 2019, 10:00:15
L'interprete ha rilevato che il risultato di un calcolo è troppo grande.

http://gambaswiki.org/wiki/error/overflow
Titolo: Re:Errore di Bus
Inserito da: dex - 13 Marzo 2019, 21:17:06
Aspita.
sto facendo un programma con molti calcoli, ma è un problema di gambas oppure delle delle risorse hardware insufficienti?
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 14 Marzo 2019, 00:00:45
Non saprei dirti, magari hai superato il valore che la variabile può contenere  :-\

Ho chiesto un parere sulla ML
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 14 Marzo 2019, 01:00:49
Ti ha già risposto Tobias Boege così:
Nell'interprete, ho trovato due posti da dove viene generato questo tipo di errore (potrebbero essercene di più):

   1. Quando un valore Float o Long viene convertito in un singolo ma il valore Float / Long è troppo grande: Stampa CSingle (2 ^ 500)

   2. Quando l'aritmetica delle date produce un valore esterno a 32 bit:
      Stampa DateDiff (CFloat (2 ^ 50), CFloat (1), gb.Second)

L'intestazione (FAST) del compilatore JIT aggiunge un'altra fonte di controlli di overflow.
Senza il codice sorgente - chi può dirlo?


Io non credo che tu usi Fast di Jit, giusto? Quindi è una delle altre due.
Titolo: Re:Errore di Bus
Inserito da: dex - 14 Marzo 2019, 02:48:22
Grazie Gianluigi.
non uso FAST ne datediff ne long, ma molte float
devo cercare una ad una le float

Grazie alla prossima
Titolo: Re:Errore di Bus
Inserito da: Top Fuel - 14 Marzo 2019, 22:45:45
Per mandare in overflow una variabile Float devi avere dei risultati con numeri veramente enoooooormi... cosa stai calcolando? ;D
Titolo: Re:Errore di Bus
Inserito da: dex - 15 Marzo 2019, 07:39:03
Ciao
arrivano numeri sballati, ecco perchè succede.

sto elaborando dei numeri presi con tesseract e non sempre sono puliti. spesso tesseract collega le cifre e tipo:  257.00  345.00  52 785 ecc..
diventano 2570003450052785 ecc...
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 15 Marzo 2019, 10:19:18
E se provassi con qualche altro software?
https://askubuntu.com/questions/16268/whats-the-best-simplest-ocr-solution
Titolo: Re:Errore di Bus
Inserito da: dex - 15 Marzo 2019, 10:32:22
non lo conoscevo
ora ci guardo
grazie della dritta
Titolo: Re:Errore di Bus
Inserito da: dex - 17 Marzo 2019, 21:36:11
Ciao Ragazzi
l'errore di bus si ripresenta spesso

ho controllato le variabili float una ad una, le cifre che arrivano hanno massimo 4 migliaia e 4 decimali tipo  3562.2356, poi su queste cifre effettuo calcoli di percentuali e salvo nel database.
non penso che siano i calcoli float.

poi ho controllato le stringhe e ho visto che arrivano stringhe fino a 9000 parole e 140.000 caratteri.
su queste stringhe uso mid e instr per estrapolare i dati
possono essere le stringhe a dare questo errore?
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 18 Marzo 2019, 19:14:47
Come si diceva prima, senza vedere un po di codice cosa vuoi che ti possiamo rispondere.
Se usi delle Array è senz'altro possibile, ma a scatola chiusa come si fa a dire?
Tobias non aveva escluso che ci potessero essere altre ragioni...
Titolo: Re:Errore di Bus
Inserito da: dex - 24 Marzo 2019, 22:33:45
Ciao raga
gli errori di Bus ogni tanto si ripresentano, a volte il programma gira per giorni senza errori, altre volte dopo 10 minuti arriva errore di segmentazione

ho visto che quando è in esecuzione gambas mi restituisce:
Citazione
QFont::setPixelSize: Pixel size <= 0 (0)

può essere questo oppure qualche componenete a generare errore?
Titolo: Re:Errore di Bus
Inserito da: dex - 31 Marzo 2019, 22:29:30
Ciao raga
Ho scoperto la parte del codice che mi crea errore di bus
Faccio caricare dei grafici in alcune Picture Box, carica regolarmente le immagini ma ogni tanto si blocca con errore di bus

come posso correggere il codice per evitare l'errore?

Codice: [Seleziona]
Public Sub ImgKitco()

If Not Exist(user.home & "/temp/") Then Mkdir user.home & "/temp/"
             
     
    If m1.SospQuoGBP = "no" And m1.StrKitcgbp Then       '   
        Shell ("wget -N -q --directory-prefix --cookies=off -o " & user.home & "/temp/wg " & m1.StrKitcgbp & " -O " & M1.ScritImma & "/gbp")
        Try PictureBoxgbp.picture = Picture.Load(M1.ScritImma & "/gbp")
    End If
   
    If m1.SospQuoUSD = "no" And m1.StrKitcUSD Then   
       Shell ("wget -N -q --directory-prefix --cookies=off -o " & user.home & "/temp/wg " & m1.StrKitcusd & " -O " & M1.ScritImma & "/usd")
       Try PictureBoxusd.picture = Picture.Load(M1.ScritImma & "/usd") 
    End If
   
    If m1.SospQuoCHF = "no" And m1.StrKitcCHF Then   
        Shell ("wget -N -q --directory-prefix --cookies=off -o " & user.home & "/temp/wg " & m1.StrKitcCHF & " -O " & M1.ScritImma & "/chf")
        Try PictureBoxchf.picture = Picture.Load(M1.ScritImma & "/chf")
    End If
       
 
 
 End If
 
 Catch
m1.MyErr = "Codice " & Error.Code & " - Form " & Me.name & " - Sub " & Error.Where & " - Errore " & Error.Text
 m1.ScriviLog(m1.MyErr)
 
End
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 01 Aprile 2019, 09:54:43
A parte che non mi è chiaro l'uso che qui fai della shell, comunque con Try rendi silenzioso l'eventuale errore su Picture.Load senza catturalo.
Tu catturi solo l'eventuale errore sul comando shell.

Potresti scrivere una cosa del genere per ottenere le anomalie senza interrompere il codice:

Codice: [Seleziona]
  Dim s As String

  If Not Exist(user.home & "/temp/") Then Mkdir user.home & "/temp/"

    s = "wget -N -q --directory-prefix --cookies=off -o " & user.home & "/temp/wg " & m1.StrKitcgbp & " -O " & M1.ScritImma & "/gbp"
    If m1.SospQuoGBP = "no" And m1.StrKitcgbp Then
      Try Shell (s)
      If Error Then debug s
      s = M1.ScritImma & "/gbp"
      Try PictureBoxgbp.picture = Picture.Load(s)
      If Error Then debug s
    End If
    '...
Titolo: Re:Errore di Bus
Inserito da: dex - 01 Aprile 2019, 12:01:18
Ciao Gianluigi
quei grafici si aggiornano ogni minuto, per visualizzarli aggiornati ogni minuto con shell scarico il file gif in una cartella e poi lo faccio caricare nella picture box.

Try in effetti è silenzioso ma sicuramente non è quello il codice che va in errore in quanto il file è gia presente nella cartella.
deve essere wget che incontra qualche problema è inceppa tutto
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 01 Aprile 2019, 12:04:46
Ma come può essere wget se tu lo catturi con catch?
Titolo: Re:Errore di Bus
Inserito da: dex - 01 Aprile 2019, 12:18:57
non lo so, in effetti nei log non leggo errori di wget.
un'altro pensiero può essere che wget scarica e sovrascrive il file esistente, può essere che picture.load tenta di caricare il file proprio mentre wget lo sta sovrascrivendo e va in errore?
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 01 Aprile 2019, 12:21:07
Scusa, ma non fai prima a provare il codice che ti ho suggerito?

Ora vado a mangiare, buon appetito...
Titolo: Re:Errore di Bus
Inserito da: dex - 01 Aprile 2019, 20:22:16
Scusa Gian
mi ero dimenticato di dirti che ho provato come mi hai suggerito ma il risultato è
Titolo: Re:Errore di Bus
Inserito da: Gianluigi - 02 Aprile 2019, 09:49:24
Allora l'errore non è causato dal tuo codice, o almeno da quella parte di codice, vedi questo esempio:

Codice: [Seleziona]
Public Sub Main()

  Try Print LaQualunque()
  If Error Then Print "Errore intercettato" & "\n"
  ' il codice continua a funzionare'
  Print ContinuoAfunzionare()

End

Private Function LaQualunque() As String

  ' ...sto facendo qualcosa che causa un errore...
  Error.Raise("errore di prova")
  Return "non mi vedrai"

End

Private Function ContinuoAfunzionare() As String
 
  '...faccio un'altra cosa
  Return "mi vedrai!!!"
 
End
Titolo: Re:Errore di Bus
Inserito da: dex - 02 Aprile 2019, 19:11:04
grazie Gian
devo continuare a lavorare e fare prove per capire che succede