* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 25, 2024, 01:16:49 pm

Inserisci il nome utente, la password e la durata della sessione.

33 Visitatori, 0 Utenti

Autore Topic: Programma che si chiude da solo  (Letto 3448 volte)

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Programma che si chiude da solo
« il: Giugno 07, 2021, 12:11:53 pm »
Ciao a tutti,
ho un vecchio programma, che ho fatto quando ero ancora alle prime armi in Lazarus, che da un mese circa mi crea problemi.
Uso questo programma sia in Windows che su Linux e, su Linux, non sempre, ma spesso, mi si chiude mentre sta girando, senza dare nessuna segnalazione.

Praticamente il programma riceve in input un elenco di directories e, per ognuna, fa questo
- la zippa
- copia il file zippato su chiavetta
- verifica che il file su disco e quello su chiavetta siano uguali
- quando ha elaborato tutta la lista, spegne il PC

Il problema è che di solito lo lancio ed amen. Ultimamente capita che dopo un paio d'ore noto che il PC è ancora acceso, vado a vedere e noto che il programma è chiuso.
Ho provato a tenerlo sott'occhio 2 o 3 volte, ma la directory su cui sta lavorando quando succede il patatrac non è sempre la stessa.



Avete qualche consiglio da darmi su come fare a capire la zona del programma che causa questo problema?


Ciao, Mario

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3277
  • Karma: +12/-0
Re:Programma che si chiude da solo
« Risposta #1 il: Giugno 07, 2021, 01:07:26 pm »
Ciao a tutti,
ho un vecchio programma, che ho fatto quando ero ancora alle prime armi in Lazarus, che da un mese circa mi crea problemi.
Uso questo programma sia in Windows che su Linux e, su Linux, non sempre, ma spesso, mi si chiude mentre sta girando, senza dare nessuna segnalazione.

Praticamente il programma riceve in input un elenco di directories e, per ognuna, fa questo
- la zippa
- copia il file zippato su chiavetta
- verifica che il file su disco e quello su chiavetta siano uguali
- quando ha elaborato tutta la lista, spegne il PC

Il problema è che di solito lo lancio ed amen. Ultimamente capita che dopo un paio d'ore noto che il PC è ancora acceso, vado a vedere e noto che il programma è chiuso.
Ho provato a tenerlo sott'occhio 2 o 3 volte, ma la directory su cui sta lavorando quando succede il patatrac non è sempre la stessa.



Avete qualche consiglio da darmi su come fare a capire la zona del programma che causa questo problema?


Ciao, Mario

Hai messo dei try ... except per capire il tutto? Inoltre ti consiglio di disseminare il programma di writeln con messaggi univoci. Poi lanci il programma da terminale e vedi l'ultimo writeln che compare prima di chiudersi. Così dovresti identificare il punto dove teoricamente va in errore e poni rimedio.
Ieri è passato, domani è futuro, oggi è un dono...

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Programma che si chiude da solo
« Risposta #2 il: Giugno 07, 2021, 01:24:56 pm »
Try / except al momento c'è solo sulla procedura principale che lancia le operazioni che ho decritto prima, potrei provare a metterne una su ognuna delle varie fasi.

Alla writeln non ci avevo pensato, buon consiglio !!!

Grazie, Mario
« Ultima modifica: Giugno 07, 2021, 01:29:26 pm da bonmario »

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1403
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:Programma che si chiude da solo
« Risposta #3 il: Giugno 07, 2021, 09:38:10 pm »
Solo un consiglio:

usa i try ... except ovunque si possano presentare potenziali problemi, in primis quando manipoli file su disco o esegui operazioni su database.

Sulle allocazioni di memoria orami è molto difficle ci siano problemi (intendo problemi tipo mancanza di spazio ad esempio per troppa frammentazione della memoria stessa), ma su disco i problemi possono sempre accadere.

Tra l'altro l'operazione di compressione, a seconda delle tecniche e delle librerie che usi, sono solitamente "pesanti" con possibili problemi, in Linux c'è pure la gestione delle autorizzazioni sui file che potrebbe provocare qualche "disagio" ...

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Programma che si chiude da solo
« Risposta #4 il: Giugno 08, 2021, 08:04:29 am »
Più che altro, la cosa strana è che non mi era mai successo che mi si chiudesse un programma.
A volte capita di scrivere del codice non puramente corretto, ma fono ad ora, mi uscivano comunque degli errori, non gestiti da me, ma comunque uscivano !!!

Per quanto riguarda gli zip, lancio direttamente l'eseguibile e rimango in attesa fino a quando il processo si chiude.

Tenderei ad escludere il problema delle autorizzazioni, visto che ieri ho fatto una prova veloce facendo fare solo gli zip, facendo saltare la copia da disco fisso a chiavetta, ed è filato tutto liscio. La chiavetta l'ho appena cambiata per togliermi il dubbio, e tanto che c'ero, sono passato da una da 32 ad una da 128 giga. In questi giorni, provo a mettere qualche try/except e writeln nel codice che fa la copia, e vediamo se ne ricavo qualcosa.

Ciao, Mario

tito_livio

  • Full Member
  • ***
  • Post: 173
  • Karma: +4/-0
Re:Programma che si chiude da solo
« Risposta #5 il: Giugno 08, 2021, 11:22:00 am »
Le cartelle da zippare sono in rete locale o sullo stesso pc?
Se le cartelle sono in rete, il problema potrebbe essere il tempo di trasferimento elevato.
A me succedeva lavorando su grossi file in rete in Delphi.
Il programma si chiudeva senza nessun messaggio d'errore.

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Programma che si chiude da solo
« Risposta #6 il: Giugno 08, 2021, 11:34:24 am »
Sono sullo stesso disco.
Alcune nella stessa partizione, altre su un'altra partizione, ma sullo stesso disco fisico

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1403
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:Programma che si chiude da solo
« Risposta #7 il: Giugno 09, 2021, 11:08:01 am »
Più che altro, la cosa strana è che non mi era mai successo che mi si chiudesse un programma.
.....

Un programma si chiude in genere quando accade un "doppio" errore. Faccio un esempio: durante l'esecuzione di un codice tracci una eccezione e nella gestione dell'eccezione stessa accade una ulteriore eccezione (a mè è capitato nel passato con errori di SO, tipo chiamo una funzione di Windows con parametri inconsistenti). Oppure nel caso di eccezioni "non gestite", come quando istruisci il SO a non generarti gli avvisi utente. Alcune librerie in C (DLL) soffrono di queste problematiche.

Poi, c'è ancora del vecchissimo codice che "butta" fuori il programma con un bellissimo (si fà per dire) exitproces.

Però come esperienza io ho Windows, con gli altri SO non ho una esperienza tale fa fornire info adeguate. In Android, quando qualcosa non và ho trovato qualche difficoltà a debuggare perchè normalmente le app si chiudono senza generare alcunchè (e anche il log attivabile nelle opzioni sviluppatore non aiuta molto).

Una cosa che potresti fare, la butto lì magari funziona, è inserire un try ... except nel file di progetto (*.lpr) nella parte deove c'è il begin ... end.

Magari li ti dice cosa c'è che non và.


Ciao
 
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Programma che si chiude da solo
« Risposta #8 il: Giugno 09, 2021, 02:42:30 pm »
Ciao,
oggi sono in ferie ed avevo un po' di tempo da dedicare alla cosa, e non so se la cosa si sta complicando o risolvendo ...

Mi son reso conto che le varie fasi che avevo descritto nel primo post, lavorano sotto thread ... non mi ricordavo di avere gestito questa cosa in questo programma !!!
Mi spiego meglio, rifacendomi a quanto avevo scritto nel primo post:

il programma riceve in input un elenco di directories e, per ognuna, lancia un thread che fa questo:
Codice: [Seleziona]
- la zippa
- copia il file zippato su chiavetta
- verifica che il file su disco e quello su chiavetta siano uguali
Quando ha elaborato tutta la lista, spegne il PC

Gestisco il tutto tramite un ThreadPool, che fa in modo che al massimo ci siano in esecuzione 4 thread contemporaneamente.

Bene, dopo aver sistemato il programma aggiungendo le varie writeln e le try/except, l'ho rilanciato e, sorpresa, questa volta è arrivato fino in fondo !!!

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1403
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:Programma che si chiude da solo
« Risposta #9 il: Giugno 09, 2021, 03:28:50 pm »
Inserendo try ... except hai comunque modificato la struttura dei thread e ciò probabilmente ha variato le tempistiche di esecuzione dei thread.

Ciò mi fà venire in mente un paio di cose:

- nei thread vengono usate risorse comuni non protette da semafori o critical section o altro;
- alcune funzionalità (chiamate a librerie ad esempio) usate non sono thread safe;

Non mi fiderei del semplice inserimento dei try..except come soluzione: un problema apparentemente risolto MA NON CAPITO non è un problema risolto.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Programma che si chiude da solo
« Risposta #10 il: Giugno 09, 2021, 05:03:55 pm »
Sono pienamente d'accordo con te, infatti avevo scritto "non so se la cosa si sta complicando o risolvendo" !!!

Per evitare problemi, avevo già messo sotto Synchronize:
- La copia dello zip su disco esterno
- La seguente verifica della copia fatta
- Le varie comunicazioni dei thread al form principale relative alla fase in esecuzione

In questi giorni dovrei riuscire a fare altre prove, ma già il fatto che su Windows non mi abbia mai fatto nemmeno una volta questo scherzo, mi fa pensare che sia qualcosa o relativo al sistema operativo, o a qualche configurazione.

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1403
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:Programma che si chiude da solo
« Risposta #11 il: Giugno 09, 2021, 09:07:02 pm »
.....
Per evitare problemi, avevo già messo sotto Synchronize:
- La copia dello zip su disco esterno
- La seguente verifica della copia fatta
- Le varie comunicazioni dei thread al form principale relative alla fase in esecuzione
......

Già i Synchronize tra thread e form sono cosa buona e giusta. E' qualcosa in piu di qualche try ... except. Potrebbe anche essere che effettivamente quello "crashava".

Ciao, facci sapere se trovi altro.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2921
  • Karma: +20/-4
Re:Programma che si chiude da solo
« Risposta #12 il: Giugno 11, 2021, 09:43:49 am »
Nel registro eventi di win c'è traccia della chiusura anomala della tua app?
Imagination is more important than knowledge (A.Einstein)

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Programma che si chiude da solo
« Risposta #13 il: Giugno 11, 2021, 09:58:05 am »
Su Windows non mi ha mai dato problemi, questo scherzo me lo sta facendo solo su Linux.
Ho provato a cercare nei log di sistema (che è più o meno l'equivalente del registro degli eventi) il nome del mio applicativo, ma non c'è traccia.
Ho provato anche a guardare nel file degli errori che crea nella "home", ma niente pure lì.

Domani lo devo rilanciare, e vediamo cosa succede.

Ciao, Mario

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:Programma che si chiude da solo
« Risposta #14 il: Giugno 11, 2021, 11:32:55 am »
Mi sta venendo un dubbio: la procedura che si occupa di copiare i dati da discoa chiavetta, viene richiamata tramite "Synchronize". Questa procedura, al suo interno, prima di iniziare la copia, ed a copia finita, comunica il proprio stato al thread principale, chiamando un'altra procedura, sempre tramite "Synchronize".

MAgari mettendo i nomi risulta più chiaro:
- il thread fa questa chiamata "Synchronize(@SincronizzaCopiaSuDiscoExt);"
- SincronizzaCopiaSuDiscoExt, al suo interno, fa quest'altra chiamata "Synchronize(@SincronizzaStato);" prima di diniziare la copia, e subito dopo averla finita

Può creare problemi il fatto di usare una Synchronize all'interno di una procedura già lanciata tramite Synchronize, anche se le 2 chiamate avvengono in sequenza all'interno dello stesso thread ?

Grazie, Mario

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19192
  • Topic in totale: 2289
  • Online Today: 58
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 33
Total: 33

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.