<div dir="ltr"><div><div><div><div><div><div><div>Mi permetto di inoltrare (e ribadire) le parole di Furieri, a proposito del minidump.<br><br></div>Inoltre, questo bug è stato già inserito da me nella lista del problemi bloccanti di QGIS:<br><br><a href="http://hub.qgis.org/issues/13272">http://hub.qgis.org/issues/13272</a><br><br><br></div>Forse non è chiaro a tutti il problema.  Oppure, devo pensare che sia invece molto noto a tutti e allora ho le seguenti ipotesi, dato che si parla di soldi:<br><br></div>Ipotesi 1 )   "Lo struzzo"  fa finta di non vedere<br><br></div>Ipotesi 2 )   "Lo str..zo"   mette un bug   e aspetta  di pescare<br><br><br></div>C'è qualche altra ipotesi ?<br><br><br></div>A presto<br><br></div>Roberto<br><div><div><div><div><div><div><br><div><div><br><div class="gmail_quote">---------- Messaggio inoltrato ----------<br>Da: <b class="gmail_sendername"></b> <span dir="ltr"><<a href="mailto:a.furieri@lqt.it" target="_blank">a.furieri@lqt.it</a>></span><br>Date: 5 settembre 2015 11:54<br>Oggetto: [Gfoss] scienza e stregoneria (was minidump alla chiusura di Qgis...)<br>A: <a href="mailto:gfoss@lists.gfoss.it" target="_blank">gfoss@lists.gfoss.it</a><br><br><br>On Sat, 5 Sep 2015 09:34:21 +0200, Luca Mandolesi wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Si parla di una macchina con windows 8 e un database in<br>
spatialiate....che su quella macchina al copia e incolla crasha... il<br>
fatto è che su altra macchina la stessa operazione col medesimo<br>
database non crusha al copia e incolla ma lo fa nel momento in cui si<br>
fanno "certi" passaggi nel gestore di stili. Il problema è che<br>
l'errore non è riproducibile è qui che mi areno, a volte lo fa altre<br>
no...quindi speravo in sto benedetto file di dump di trovare<br>
spiegazioni.<br>
<br>
</blockquote>
<br>
Luca,<br>
<br>
un "bug pazzo" di questo tipo non e' affatto un oggetto misterioso<br>
(almeno in linea di principio); alla radice c'e' sempre una causa<br>
assolutamente razionale e riproducibile, solo che e' dannatamente<br>
difficile da identificare correttamente, e quindi puo' date l'erronea<br>
impressione di un problema "indemoniato" del tutto caotico.<br>
<br>
sintomi assolutamente tipici:<br>
- gira "quasi sempre" bene, ma ogni tanto mi va in crash nelle<br>
  situazioni piu' disparate e senza nessuna logica apparente.<br>
- su Linux gira perfettamente, invece su Windows mi va in crash<br>
  (ma puo' accadere facilmente anche l'opposto)<br>
- ho svariati PC Windows assolutamente identici: su molti gira bene,<br>
  ma su un paio mi va regolarmente in crash.<br>
- l'ho usato tranquillamente per un mese, non ho aggiornato nulla,<br>
  eppure da ieri ha iniziato ad andare frequentemente in crash<br>
- etc etc etc<br>
<br>
non e' l'unica spiegazione possibile, ma molto spesso (quasi sempre)<br>
si finisce con lo scoprire che la causa reale per tutta questa<br>
disparata collezione di errori apparentemente misteriosi ed<br>
assolutamente inspiegabili e' una ed una sola.<br>
<br>
QUEL SOFTWARE CONTIENE VARIABILI NON INIZIALIZZATE<br>
<br>
senza entrare in troppi dettagli tecnici, una variabile non<br>
inizializzata e' potenzialmente nefasta perche' al momento<br>
del run-time puo' assumere qualsiasi valore arbitrario in<br>
modo assolutamente casuale.<br>
ma non finisce qua: una singola variabile non inizializzata<br>
puo' innescare facilmente una lunga catena di eventi molto<br>
ramificata ed assolutamente imprevedibile, per cui magari il<br>
crash finisce con l'avvenire in qualche punto che apparentemente<br>
non sembra avere nessun legame diretto con la criticita' iniziale<br>
che ha scatenato l'inferno.<br>
<br>
tutto questo in fondo spiega bene perche' gli effetti pratici<br>
possono essere cosi' variegati e fantasiosamente disparati;<br>
dare la caccia al sintomo in questo caso e' sostanzialmente<br>
inutile, perche' il legame tra causa ed effetto e' dettato<br>
esclusivamente dal caso (cioe' dai valori assolutamente<br>
arbitrari e casuali presenti in memoria al momento del runtime).<br>
evidentemente la soluzione "vera" e' una sola: arrivare ad<br>
identificare esattamente dove, come e perche' si viene a<br>
creare una condizione di variabile non inizializzata.<br>
e molto spesso questo e' uno dei task di debugging piu'<br>
rognosi e piu' difficili da risolvere.<br>
<br>
se poi si tratta di un software che usa intensivamente il<br>
multithreading la situazione puo' facilmente diventare un<br>
vero e proprio incubo, perche' gli errori logici dovuti alle<br>
variabili non inizializzate possono intrecciarsi in modo<br>
perverso con ulteriori errori dovuti a cattiva sincronizzazione<br>
tra i vari threads che stanno girando in parallelo, fino a<br>
creare le situazioni piu' assurde e meno verosimili.<br>
<br>
se questo e' il contesto (e nota bene: se ...), analizzare<br>
il memory dump e' assolutamente inutile: perche' quel dump<br>
e' semplicemente una fotografia statica della memoria al<br>
momento del crash, ma non ti dira' assolutamente nulla su:<br>
- eventuali errori avvenuti in precedenza causa mancata<br>
  inizializzazione delle variabili.<br>
- eventuali errori dovuti a cattiva sincronizzazione tra<br>
  i vari threads.<br>
<br>
facciamo conto che sia un giallo: il medico legale potra'<br>
dirti facilmente che la vittima e' morta perche' aveva una<br>
pallottola esattamente in mezzo al cervello.<br>
ma non potra' mai arrivare a capire se quella pallottola<br>
e' stata sparata per motivi passionali, per mafia, per<br>
rapina, per terrorismo o magari per uno sventurato incidente<br>
assolutamente involontario.<br>
tutto questo tocca al detective scoprirlo ;-)<br>
<br>
<br>
possibili soluzioni (e ruolo attivo delle communities)<br>
---------------------------------------------------------<br>
lamentarsi "mi va in crash in modo incomprensibile e casuale"<br>
evidentemente serve a poco; ok, fa scattare un vago segnale di<br>
allarme, ma e' troppo generico per potere sperare di innescare<br>
qualche intervento risolutivo in modo realmente utile.<br>
<br>
invece fortunatamente molti utenti sono in grado di compilarsi<br>
autonomamente l'applicazione a partire dai sorgenti.<br>
in genere chi fa queste attivita' tira semplicemente ad arrivare<br>
fino in fondo con il minore sforzo possibile, ma cosi' facendo si<br>
perdono occasioni preziose per contribuire utilmente allo sviluppo<br>
del proprio progetto preferito.<br>
basterebbe semplicemente attivare sempre il massimo livello diagnostico<br>
supportato dal compilatore e quindi dedicare una decina di minuti<br>
alla attenta lettura di tutti i warnings riportati dal compilatore,<br>
compresi (soprattutto) quelli di piu' infimo rango.<br>
molto verosimilmente ci troverete alcune interessanti segnalazioni<br>
relative all'uso di variabili potenzialmente non inizializzate<br>
ed altri analoghi pasticcetti (capita, e pure spesso: e non e'<br>
detto che non possa sfuggire all'attenzione degli sviluppatori)<br>
ma non finisce qua: un gran numero di utenti significa anche un<br>
gran numero di compilatori differenti (gcc, msvc, clang etc) e di<br>
versioni differenti: spesso accade che un determinato compilatore<br>
riesca ad identificare condizioni critiche che invece sfuggono ad<br>
altri; fare tante compilazioni indipendenti con diagnostica estesa<br>
significa arrivare con poco sforzo ad un codice assolutamente<br>
pulito e quindi piu' robusto.<br>
naturalmente poi vi dovrete prendere il (piccolo) disturbo di<br>
segnalare agli sviluppatori tutti i "pasticciotti" che vi e'<br>
sembrato di identificare, fornendo tutti gli elementi utili<br>
per la loro identificazione.<br>
gli sviluppatori adorano questo tipo di segnalazione, ci vanno<br>
a nozze e baceranno commossi la terra sotto ai vostri piedi :-D<br>
<br>
l'altra possibile linea di intervento riguarda invece l'uso<br>
sistematico di analizzatori dinamici di memoria come <a href="http://p.es" rel="noreferrer" target="_blank">p.es</a>. Valgrind.<br>
qua andiamo un po' piu' sul complesso, e sicuramente serve un<br>
certo livello di skill tecnico (ma non vi spaventate, nulla<br>
di realmente impossibile, basta un pizzico di predisposizione,<br>
un po' di tempo libero e soprattutto buona volonta').<br>
Valgrind e' perfettamente in grado di gettare piena luce su molti<br>
errori di memoria non inizializzata, e molto spesso riesce pure<br>
a beccare gli errori di sincronizzazione tra thread concorrenti.<br>
mettere in piedi una sessione di test su Valgrind per una app<br>
complessa come QGIS porta via un sacco di tempo (lunghe ore ...):<br>
e per arrivare ad interpretare correttamente un Valgrind-report<br>
serve sicuramente intelligenza e molta esperienza (e tempo ...);<br>
ma e' anche vero che tanti testers che lavorino in parallelo ed<br>
in modo indipendente possono velocemente arrivare a sviluppare<br>
una molte di lavoro impressionante.<br>
<br>
<<“Con molti occhi puntati addosso, ogni bug diventa una bazzecola>><br>
<br>
... a patto che siano occhi attenti, in grado di capire e dotati di<br>
una strumentazione diagnostica adeguata :-)<br>
<br>
OTH<br>
Sandro<br>
<br>
<br>
<br>
_______________________________________________<br>
<a href="mailto:Gfoss@lists.gfoss.it" target="_blank">Gfoss@lists.gfoss.it</a><br>
<a href="http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss" rel="noreferrer" target="_blank">http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss</a><br>
Questa e' una lista di discussione pubblica aperta a tutti.<br>
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.<br>
750 iscritti al 18.3.2015</div><br></div></div></div></div></div></div></div></div></div>