Newsgroup: it.comp.lang.delphi
Titolo: Gestione degli errori con Delphi 5

Salve a tutti,
ho un interessante quesito da sottoporvi:
mi capita, da quando ho fatto l'upgrade dalla ver.3 alla 5, che le mie
applicazioni non generano più errori. Il problema è che in caso di errore il
programma non segnala niente all'utente e, cosa stranissima, prosegue
nell'esecuzione alla riga successiva di codice.
Creando una nuova applicazione, ho riscontrato che alcune volte mi crea un
eseguibile che produce normalmente degli errori ed altre volte l'eseguibile
che non genera errori, il tutto in modalità apparentemente casuali.
Ho fatto moltissime prove: compilando su Win 2000, 98 e 95; disintallato
tutti i componenti, provato su altri PC, modificato tutte le opzioni del
compilatore ecc. ma non sono riuscito a capire come ovviare al problema, nè
esattamente in quali casi si presenta.
Ho guardato su molti newsgroup, FAQ, bugs-list, ecc. ma non ho trovato
traccia della cosa, possibile che capiti solo a me?
Ringrazio in anticipo chi saprà darmi un consiglio, o una segnalazione di
casi analoghi.
Michele
REMOVE...@libero.it

La cosa è effettivamente molto strana.
Io ho fatto il porting delle applicazioni dalla versione 4 (service pack 3)
alla versione 5, per quanto riguarda gli errori, non ho avuto alcun
problema.
Hai installato il Service Pack 1 di D5 ? (magari ti risolve questo problema)

> Hai installato il Service Pack 1 di D5 ? (magari ti risolve questo
problema)
Ho provato anche quello ma senza risultato..
Provvisoriamente ho tamponato il problema dichiarando un gestore delle
eccezioni diverso da quello di default di delphi (Application.OnException :=
CustomExcept;)
ma ovviamente non può essere una soluzione definitiva.
La cosa ancora più strana è che ottengo risultati diversi a seconda dei
componenti usati dalla applicazione (anche con quelli standard di Delphi), e
di altri vari fattori.
Ad esempio:
creando una nuova applicazione, ed inserendo sulla form un oggetto TF1Book
(fornito con Delphi nella palette Active X), ad associando ad un TButton il
seguente codice, non ottengo l'eccezione, ma il codice prosegue allo
showmessage.
Se ci fosse qualche volenteroso per fare una prova, mi piacerebbe sapere se
sono l'unico programmatore Delphi su questo pianeta che non ottiene una
eccezione.
Grazie per l'interesse.
Michele Palma
var
  a,b : integer;
 c: double;
begin
  a:=0;
  b:=1;
  c:=b/a; {divsion by zero!!!}
  showmessage(FloatToStr(c));
end;


Non so se questo sia solo un esempio, ma in questo caso + che Delphi
c'entrano le impostazioni del coprocessore matematico. Infatti, sebbene tu
divida 2 interi, l'operazione viene svolta fra 2 reali (altrimenti dovevi
usare la DIV).
Il coprocessore infatti puo' essere impostato in modo da non generare
eccezioni. Puo' essere che D5 usi questo come default (non ho fatto delle
prove, quindi e' solo una supposizione).
Prova a ripetere l'esempio sostituendo
  c:=b div a
alla
  c:=b/a
Ciao,
Stefano

> Non so se questo sia solo un esempio, ma in questo caso + che Delphi
Si, in effetti č solo un esempio, ed utilizzando "div" anzichč "/" si genera
regolarmente l'eccezione. Ma il punto č che, utilizzando "/", se cancellando
dalla form il componente TF1Book il messaggio di errore viene generato
regolarmente anche a run-time, mentre invece con il componente viene
generata l'eccezione all'interno del debugger ma non il messaggio di errore
a run-time.
Ho fatto un esempio non molto chiaro, ma il vero problema č che ho piů di
una applicazione che se eseguite all'interno dell'IDE mi generano le
eccezioni, mentre a run-time non si vede nessun messaggio. Quindi l'utente
del programma, se avviene un errore, non ne viene informato e continua a
lavorare sull'applicazione, con possibili conseguenze disastrose per i dati.
Facendo alcune prove ho riscontrato che adirittura in alcuni casi
l'esecuzione prosegue al punto seguente della riga che contiene l'errore
(sconvolgendo le leggi informatiche fino ad ora conosciute).
Ciao
Michele


Beh, se ti guardi le informazioni sulle eccezzioni Win32 fornite dalla M$ ti
accorgerai invece che queste sono cose normali e previste dal meccanismo
delle eccezzioni di sistema. Nel tuo caso devi chiarire cosa e' meglio per
te
Ciao,
Stefano

 te
Scusa l'insistenza, ma la cosa non mi è chiara. Io ho una applicazione che
se lanciata fuori dal'lIDE di Delphi non dà nessun messaggio di errore, ad
esempio, se una tabella è chiusa e io la provo a mettere in stato di edit,
non rilevo nessun errore; oppure se provo a referenziare il 4° elemento di
una StringList di 3 elementi non ricevo il classico messaggio di errore
"...out of bounds", ecc. ...non mi sembra sia una cosa normale, soprattuto
perchè la stessa applicazione quando era compilata con Delphi 3 produceva
tutti i suoi messaggi al posto giusto.
Pensavo piuttosto ad un parametro di compilazione del Delphi 5 o qualcosa di
simile, hai qualche suggerimento in questo senso?
Ciao,
Michele


Vedi sopra... le opzioni ci sono di sicuro, verifica di non aver
disabilitato le eccezioni, anche se in teoria un progetto con VCL non
dovrebbe compilare nemmeno se le disabiliti
Ciao,
Stefano