Menù Principale

Cerca
Login
Registrati
Link
<< Discussione precedente | Discussione successiva >>   
[Bug] - Notifica Bug - File winpenpack.xml Danneggiato

Autore Messaggio
Mefistofele
gio 14 ago 2008 - 23:32

online
Utente registrato #8550
Registrato il: dom 03 feb 2008 - 11:29
Messaggi: 4

Versione: 1.4.1.175
Rilasciata il: 18.07.2008

Recentemente il pc ha cominciato a inchiodarsi piu del solito.
In seguito ad un riavvio, winPenPack non parte e popuppa il seguente messaggio d'errore:

---------------------------------------------------------
End tag 'PathCache' does not match the start tag 'file'.

Line: 117
<HotKeyModifier>0</HotKeyModif.
---------------------------------------------------------


Dopodiche tocca al solito msgbox di windows con "Application Error":

---------------------------------------------------------
L'istruzione a "0x0050e187" rifersce alla memoria a 0x00000000. La memoria non puo essere "letta"
---------------------------------------------------------


Aperto il file winpenpack.xml, Firefox restituisce:

---------------------------------------------------------
Errore interpretazione XML: tag corrispettivo mancante. Atteso: </file>.
Indirizzo: file:///xxxxx/XMenu/winPenPack/User/winpenpack_launcher/winpenpack.xml
Linea numero 117, colonna 68:
<HotKeyModifier>0</HotKeyModifier>enpack_launcher\8.ico</PathCache
---------------------------------------------------------


Confrontantando l'ultimo backup (sia benedetto), riscontro
Sembra che sia sia spxxxato un CrLf subito dopo l'HotKeyModifier e che sia sparita anche una
parte del menu. Piu precisamente è sparita la seguente parte.

---------------------------------------------------------
<HotKeyModifier>0</HotKeyModifier>CrLn
<HotKeyCode>25</HotKeyCode>
</file>
</files>
</files>
<files name="System">
<file name="Driver Magician">
<PathCache>winpenpack\Cache\winp
---------------------------------------------------------


Ripristinata il file con i tag mancanti, tutto funziona a meraviglia (il programma
riconosce che è stato chiuso malamente e mi chiede se voglio ripristinare l'ultima sessione).

Probabilemente si è inchiodato a meta di una chiamata della TfrmMain.SaveListXML
Oserei proporre di spostare la parte di codice relativa al controllo del file winPenPackTemp.xml

---------------------------------------------------------
//Save security
if (Options.SaveSecurity) then
if (FileExists(PathUser + Launcher + 'Temp.xml'))
---------------------------------------------------------

(Main.pas, Riga 1224)

prima del caricamento dell'effettiva configurazione, oppure di inserire qualche controllo durante l'interpretazione
del xml.

E' anche vero che l'errore dovrebbe accadere raramente (per riuscire a ricreare l'errore dovrete passare sotto una scala rompendo uno specchio durante venerdi 13), ma non essendo intercettato, il programma non riesce a ripristare il backup, cosa che va fatta manualmente
(SE sai che quello è il problema, SE sai dove stanno i backup).

Se posso essere di qualche aiuto o se la spiegazione non è chiara fatemi sape...
Torna ad inizio pagina
ZioZione
ven 15 ago 2008 - 11:09
online

Utente registrato #74
Registrato il: dom 21 gen 2007 - 11:31
Provenienza: Tradate (VA)
Messaggi: 3821
Ciao Mefistofele, benvenuto nel forum!
Ti ringrazio molto per l'analisi accurata dell'errore (non è da tutti, sai...) e per il suggerimento relativo al codice. Sicuramente ne faremo buon uso... appena tornerà dalle ferie chi ci mette le mani
Continua a seguirci con questa attenzione e con altri suggerimenti, per noi è importantissimo!
Cordialmente
ZioZione
Torna ad inizio pagina
Mefistofele
ven 15 ago 2008 - 19:24

online
Utente registrato #8550
Registrato il: dom 03 feb 2008 - 11:29
Messaggi: 4
l'onore è tutto mio se posso essere utile
Torna ad inizio pagina
Danix
mer 20 ago 2008 - 23:56

online

Utente registrato #1
Registrato il: ven 29 dic 2006 - 05:38
Provenienza: Sassari
Messaggi: 12956
Benvenuto anche da parte mia, Mefistofele

Puoi allegare main.pas della 1.4.1.175 con la modifica secondo te necessaria a correggere il bug?

P.S. tra l'altro ho appena scoperto un altro bug abbastanza grave (non presente nella 1.4.1.174) che riguarda l'installazione degli X-Software quando l'interfaccia del menù non è in italiano..
Torna ad inizio pagina
Sito Web
Mefistofele
ven 22 ago 2008 - 13:12

online
Utente registrato #8550
Registrato il: dom 03 feb 2008 - 11:29
Messaggi: 4
Premesso che l'unico dato che si puo "perdere" nel menu è la configurazione (i due files X-Launcher.cfg e winPenPack.xml), io non permetteri neanche all'utente la scelta di abilitare/disabilitare il file della sicurezza, ma lo lascerei attivo di default. Non essendo possibile una scrittura atomica del xml (e non essendoci un server che gestisce le transazioni con una rollback sempre pronta ad evitare una scrittura errata/parziale), la protezione del xml dovrebbe diventare una priorità.
Altrimenti si rischia di perdere tuuuttta la configurazione
Nel mio caso, la riga che dava errore era (probabilmente, non sto debuggando quindi vado a ipotesi) la

LoadOptionsXML(XMLLoad.DocumentElement.ChildNodes['Option']);
Riga 1099

del Main.pas. Subito dopo il controllo/creazione delle cartelle viene cercato e caricato il file delle opzioni. Se questo non è presente si ipotizza una installazione vergine, altrimenti si passa alla lettura. Se il file è corrotto, la LoadOptionsXML vomita l'errore alla funzione chiamante (non c'è la gestione dell'errore al suo interno) e quindi l'exe comincia a popuppare a manetta (scusate questo linguaggio molto tecnico, ma gli std del MIT sono difficili da dimenticare ).

Se i backups e la copia di sicurezza resteranno opzionali
[cosa che sconsiglio (scusate l'osare): i due file non contengono (e non dovrebbero) dati personali, quindi la gestione di una eventuale copia non dovrebbe interessare all'utonto e non violerebbe nessuna privacy]
, una soluzione mooolto semplicistica sarebbe trasformare la LoadOptionsXML (Common Util.pas) in una funzione booleana, con all'interno un grande try che restituisce false se durante la lettura si genera un errore. Se il "TrovaTutti" del mio notepad non sbaglia, c'è solo una chiamata che andrebbe modificata (proprio quella della Main.pas:TfrmMain.FormCreate. Nel caso il file sia danneggiato si puo ritornare allo stato originale del programma. Si potrebbe anche tryzzare la SaveOptionsXML, ma nel caso di un arresto brutale, la gestione dell'errore durante la scrittura non servirebbe...

Nel caso la copia di sicurezza venga standardizzata, si puo spostare il codice che controlla la presenza del file temp (righe da 1226 a 1234 comprese) prima della lettura delle opzioni (riga 1099).
In questo modo si perderebbero (solamente) tutte le modifiche apportate alla lista delle app nell'ultima istanza.

Allego i due .pas con la LoadOptionsXML portata a funzione.
La funzione è definita false all'inizio e restituisce true solamente se il blocco try non termina brutalmente la funzione. Nel main, se la chiamata restituisce false esegue il blocco di codice che eseguirebbe se il file non esistesse.
Non so se questo comportera altre modifiche o se funzionera al primo tentativo (forse questo è sperare troppo )(è dalla scuola che non uso ObjectPascal, quindi gli errori di sintassi sono probabili).
Per sviluppare usate un tool free (come quello che si trova fra le X-Software) o usate Delphi? Se mi consigliate un buon software, potrei debuggare il codice da me..
Spero che possa essere d'aiuto. Se ho scritto mega-cavolate sentitevi pure liberi di insultarmi (be, non troppo liberi )
file_pascal_modified.rar
Torna ad inizio pagina
icemax
ven 22 ago 2008 - 15:00

online
Utente registrato #194
Registrato il: dom 21 gen 2007 - 22:27
Messaggi: 1371
Ciao Mefistofele, benvenuto!!

intanto grazie per la segnalazione del "grave" bug
e grazie per aver postato la tua risoluzione.

sono d'accordo sul fatto che il "codice" mostra delle gravissime falle riguardo
alla mancanza TOTALE della gestione degli errori (' ..imperdonabile')

riguardo al debugging mi permetto di segnalarti Delphi .. poichè il porting
del codice e di tutto il progetto su IDE open .. richiede molto tempo e risorse.

Ti inviterei quindi a provare il debugging del launcher e magari a proporre
le tue idee .. sicuramente molto valide .. e innovative..

Tutto il team te ne sarebbe grato .


Via libera Mefistofele ... anzi .. a manetta.

tnx
Massimo

(ps. sto testando una parte del codice che hai allegato ... ma bisognerebbe
rivederlo ..)


[ Modificato ven 22 ago 2008 - 15:02 ]
Torna ad inizio pagina
Mefistofele
ven 22 ago 2008 - 20:27

online
Utente registrato #8550
Registrato il: dom 03 feb 2008 - 11:29
Messaggi: 4
in linea di principio...

(a parte il fatto che non avendo la piu pallida idea di come funzionino:
l'oggetto TXMLDocument (e la classe IXMLNode)
il modulo Common Utils
le funzioni ReadStringXML e ChildNodes
non so cosa potrebbe causare lo spostamento del codice che ho suggerito)

...dovrebbe andare tutto
(si capisce l'ironia? )

per fare le cose fatte "un po + seriamente" (intendo rispetto alle mie modifiche alla carlona), si potrebbe aggiungere una funzione "CheckXML(Path: string): boolean" nel modulo delle utils, cosi ogni volta che si apre un file di configurazione (che sia quello attivo, la sua copia temp o i vari backups) si puo controllare che tutti i nodi siano aperti e chiusi correttamente.
è anche vero che se la LoadOptions si mangia tutto il file e non lascia tralasciato niente il semplice blocco try dovrebbe risolvere ogni problema....

dopo cerco se ho il delfino da qualche parte e provo a debaggare.
Cheers.
Torna ad inizio pagina

Moderatori: Danix, Taf, Rcs, Energy, zandet2, ZioZione, Admin, LordJim60

Salta:     Torna ad inizio pagina

RSS discussione: rss 0.92 RSS discussione: rss 2.0 RSS discussione: RDF
Powered by e107 Forum System