Che cosa fai con un heisenbug? [duplicare]

19

Ho ricevuto una segnalazione di bug da uno dei miei utenti in una sezione del software. Lo scenario è fondamentalmente uno scenario databinding in cui l'utente inserisce le informazioni e tali informazioni sono stampate in pdf.

Il problema è che la funzionalità:

  • È usato frequentemente (circa 40 volte a settimana)
  • Non è stato aggiornato / modificato in mesi
  • L'area del codice è relativamente semplice da percorrere
  • La validazione sembra soddisfacente (cioè, se l'informazione non è stata compilata nell'app, la validazione si attiva indicandola con un msgbox prima che il pdf venga generato)

Ma questo utente afferma che nelle ultime 2 settimane è successo circa 3 volte su 50 e non riesco a riprodurlo.

Quindi cosa fai nel caso di un heisenbug?

    
posta Steven Evers 27.10.2010 - 00:32
fonte

6 risposte

22

Aggiungi un po 'di registrazione a questo codice utenti.

    
risposta data 27.10.2010 - 00:36
fonte
13

Ho visto cose come questa su un sistema embedded impiegando 6 mesi per trovarlo. Davvero frustrante.

Tuttavia, nel desktop land, è incredibile cosa succede se vai a vedere effettivamente cosa fa l'utente. Potrebbero fare le cose in un ordine / modo che non era stato previsto e questo a sua volta causa il problema.

    
risposta data 27.10.2010 - 09:34
fonte
11

a seconda della situazione che potresti avere successo con:

  • Monitora la macchina dell'utente (perfmon, eventlog, ecc.)
  • Monitora l'utente (sedili con loro finché non hanno di nuovo il problema)
  • Sostituisci temporaneamente la macchina dell'utente (caricale su un altro desktop per vedere se si tratta di una cosa hardware / os)

Il suggerimento di logging di kasterma è ancora buono, dare loro una build di debug o usare la registrazione iniettabile se la distribuzione completa è troppo fastidiosa.

    
risposta data 27.10.2010 - 00:50
fonte
6

Questo è spesso causato da processi concorrenti (non processi a livello di OS, solo ... cose generali che accadono nella tua applicazione: eventi, thread, input / output ecc.) che influenzano il rendering in qualche modo. Questo porta a comportamenti diversi a seconda dell'ordine in cui si verificano, e il debugging e l'interruzione spesso interferiscono con questo.

Una buona strategia è quella di sostituire il passaggio attraverso il debugger con più logging - questo richiede molto meno tempo e quindi è molto più probabile che lasci le cose così come sono mentre ti danno ancora più informazioni.

In fin dei conti, però, non c'è niente di meglio di capire che cosa fa effettivamente il sistema. C'è un componente, e uno solo, che dovrebbe essere responsabile per il mantenimento dello stato dell'interfaccia utente? (Di solito dovrebbe esserci.) Se è così, perché sta ricevendo comandi incoerenti in primo luogo? Ovviamente, la registrazione può spesso aiutare a rispondere anche a queste domande.

    
risposta data 19.02.2013 - 13:13
fonte
4

La cosa migliore da fare è aggiungere il logging e provare a prenderlo in flagrante. Se ciò non è pratico, l'unica cosa che rimane è fare una revisione del codice molto approfondita. Passare attraverso il registro delle modifiche sarebbe un modo ragionevole per iniziare.

    
risposta data 27.10.2010 - 00:51
fonte
4

Controlla l'hardware.

Eseguire un test della memoria sulla macchina che mostri il problema. Esegui un carico pesante della CPU e verificalo. Qualcosa come Prime95.

L'hardware non è perfetto e se l'hardware è cattivo, un programmatore può sprecare un sacco di tempo alla ricerca di bachi che semplicemente non esistono.

    
risposta data 02.03.2011 - 02:57
fonte

Leggi altre domande sui tag