Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: antoniog - Aprile 26, 2020, 03:50:06 pm

Titolo: Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: antoniog - Aprile 26, 2020, 03:50:06 pm

LinuxMint 19 Mate, Lazarus 2.0.0x64Buongiorno, difficile da capire:
in un Datamodulo nell'evento -onCreate- ho inserito il richiamo ad una procedura di una unit : apritabelle.
La procedura è questa:
Codice: [Seleziona]

  I:=0;
   with Dataconta do
     begin
       While I < (ComponentCount-1) do
         begin
           try
             if Components[I] is TZTable then
               begin
                 try
                 begin
                 TTemp:= Components[I] as TZTable;
                      Filename:= TTemp.Tablename;
                      //informa('il file è :' + filename);
                      Sleep(1);
                      Application.ProcessMessages;
                      TTemp.Active:=False;
                      TTemp.Active:=True;
                    end;
                  except
                     on E: Exception do exit; // EsercizioBase;
                     //exit;
                  end;
               end;
           except
             on E: Exception do
             begin
             Informa('Si è verificato un errore in una o più tabelle'#13#10+
             'in Apri Tabelle per ' + FileName+
             '   è necessario riconvertire gli archivi'#13#10+
             '   o scegliere un altro esercizio'#13#10+
             'Sarà attivato l''''Esercizio di Esempio');
          DataConta.Aziende.Active:=True;
             exit;
            end;
           end;
           I:=I+1;
         end;
       end;
Se non inserisco :
Codice: [Seleziona]

Sleep(1);
Application.ProcessMessages;
mi ritorna l'errore:
Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
NON È UN PO STRANO?
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'. [RISOLTO]
Inserito da: xinyiman - Aprile 27, 2020, 08:52:42 am
Mi sembra molto strano. Lo stesso codice su qindows o su ubuntu ad esempio come si comportano?
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'. [RISOLTO]
Inserito da: bonmario - Aprile 27, 2020, 11:14:18 am
Ciao,
premetto che in fondo al titolo della discussione hai messo "[RISOLTO]", quindi non capisco se nel frattempo hai trovato la soluzione da solo.

Nel caso in cui tu avessi ancora il problema, per caso il codice che hai postato, è lanciato all'interno di un thread?

Ciao, Mario
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'. [RISOLTO]
Inserito da: antoniog - Aprile 27, 2020, 01:20:26 pm
bonmario
facendo delle prove sull'errore ho capito che bisognava ritardare il ciclo quindi ho provvisoriamente risolto mettendo:
Sleep(1);
Application.ProcessMessages;
ma non mi sembra normale. E' una semplice procedura senza thread.


xinyiman
proverò su windows prossimamente.


Forse ZeosLib 7.1.4 non è completamente compatibile lazarus 2.0.6
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'. [RISOLTO]
Inserito da: Stilgar - Aprile 27, 2020, 05:54:03 pm
Ciao.


Notavo che facevi un Application.ProcessMessages.


Non vedendo altro che il ciclo while (curiosa scelta al posto di un for) mi domando se c'è qualche cosa che possa "scattare" e trovare un nil da qualche parte.


Quindi il problema non è strettamente legato al while ma a qualche "paint selvatica" che si schianta.


Se sei in "onCreate" magari evita di chiudere l poi riaprire il dataset. Magari controlla solo se il dataset è chiuso per aprirlo.


Suggerimenti a spaglio così a sentimento.....




Stilgar
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'. [RISOLTO]
Inserito da: antoniog - Aprile 28, 2020, 03:34:40 am
Stilgar, è veramente una "paint selvatica" che lo fa schiantare
.il problema è in una tabella che attivandola da l'errore:
Il progetto ..... ha sollevato una eccezione di classe 'External: SIGSEGV'.
 All'indirizzo 7FFFF6940F2F
Ne ho provate molte ma non sono ancora riuscito a risolvere. La tabella sembra uguale a tutte le altre.
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: Stilgar - Aprile 28, 2020, 02:05:23 pm
Ti potrei suggerire di controllare anche l'apertura della connessione al db.
Così a design time devi ricordarti di "spegere" la connessione prima dell'esecuzione. Oppure metti un controllo se la connessione è aperta.Poi passi a fare l'apertura delle tabelle come fai adesso. Magari quella in questione, per qualche motivo perde la connessione in avvio. (La sparo a casaccio di nuovo)

Stilgar
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: antoniog - Aprile 29, 2020, 03:32:19 pm

ho risolto facendo una retrocessione di Lazarus e ZeosDbo,
Avevo intuito che il problema  era dato da Zeos 7.2.6 con SQLITE3 ma su Lazarus 2.0.6 non si riesce ad installare Zeos 7.1.2 che funziona, tramite FPCUPDeluxe ho installato una seconda istanza di Lazarus la ver. 1.6.2 e ZeosDBO 7.1.2 e tutto è tornato a funzionare, il programma si compila e funziona correttamente senza errori. Mantenendo le versioni aggiornate non sarei riuscito a compilare o a farlo funzionare perchè gli errori segnalati erano molti di 'access violation' oltre a quello in oggetto sulle istruzioni che modificano le tabelle come .next-.post-.edit-.insert.
Mi dispiace perchè gradivo molto la versione 2.0.6 di Lazarus ma se un sistema è funzionante è meglio non cambiarlo.
Non credo che si possa mettere 'RISOLTO' a questo post.
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: Stilgar - Aprile 29, 2020, 03:37:53 pm
Stano.Uso la 2.06 senza problemi con Zeos 7.2.6

Che versione del compilatore stai usando?
Stilgar
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: antoniog - Aprile 29, 2020, 06:08:53 pm
fpc 3.0.4
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: Stilgar - Aprile 29, 2020, 06:10:31 pm
Molto ma molto strano.Pensavo fosse una 3.3.1 che ti rompeva ...
La 3.0.4 è la stessa che usavo.
mmmm

Stilgar
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: antoniog - Aprile 29, 2020, 06:27:42 pm
si, molto strano ed impossibile da verificare. Ho due programmi gestionali abbastanza complessi, con molte tabelle, con database sqlite3 ed entrambi danno errore di access violation alla manipolazione delle tabelle. Per entrambi ho dovuto tornare alle versioni precedenti.
Penso sia Zeos che ha dei bug.  gli errori:
--Il progetto ..... ha sollevato una eccezione di classe 'External: SIGSEGV'.
 All'indirizzo FF
-- e su un tabella.Post Connot find bounds of current function.

Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: antoniog - Aprile 29, 2020, 08:20:28 pm
sono riuscito ad installare Zeos 7.1.2 stable sotto Lazarus 2.0.6 e sembra funzionare tutto, quindi il caos era dovuto alla ver. di Zeos 7.2.6.
Quindi risolto, grazie per l'aiuto.
Titolo: Re:Il progetto..ha sollevato una eccezione di classe 'External: SIGSEGV'.
Inserito da: antoniog - Maggio 30, 2020, 12:08:01 am
"sono riuscito ad installare Zeos 7.1.2 stable sotto Lazarus 2.0.6 e sembra funzionare tutto, quindi il caos era dovuto alla ver. di Zeos 7.2.6."


SBAGLIATO! con questa configurazione funziona solo fino a quando non si compila l'intero progetto e poi ritorna l'errore che a runtime è di "ACCESS VIOLATION".


Su ogni tabella di un vecchio database SQLite3 all'esecuzione di un NEXT  o POST viene generata un'eccezione di 'External: SIGSEGV' in debug e a runtime "ACCESS VIOLATION".

Se l'errore non verrà corretto diventerà difficile fare manutenzione nel tempo ai propri programmi con Lazarus.