@DieterLucking ha assolutamente ragione, ma volevo aggiungere a ciò che ha detto. Quella regola non si applica solo al C ++ ma a quasi tutte le lingue, comprese quelle gestite.
L'idea di fail veloce è che non esagerare e fornire tutti i tipi di controllo e gestione delle eccezioni per "provare" a continuare a funzionare quando ci sono condizioni di errore impreviste perché hai l'impressione che il mio prodotto sia 24/7 deve correre. Essere in grado di eseguire 24 ore su 24, 7 giorni su 7, è un grande requisito e tutti possiamo sforzarci di farlo, ma la realtà è che il prodotto ha bisogno di eseguire correttamente 24/7. Ma il software ha un bug occasionale, alcuni sono recuperabili ma molti non lo sono. In questi casi, si potrebbe anche andare in crash, perché un processo del server che va in crash, passa in modalità offline per 20 secondi e viene riavviato è ancora un'alternativa migliore di un processo del server che rimane in esecuzione per ore ma gestisce le richieste in entrata in modo errato per ore fino al riavvio di un utente esso.
Quindi cosa significa per te come sviluppatore? Se ci sono circostanze impreviste, non controllarle (non le anticiperai mai nemmeno se ci provi) e lasci semplicemente che il tuo codice si blocchi. Quando ciò accade, sarai in grado di catturare un crash dump e determinare la posizione esatta del crash e spesso la causa principale.
E prima che qualcuno lo legga, si innervosisce e inizia a commentare come difendo la scrittura di codice che va in crash e in che modo mi rende uno sviluppatore terribile, ecco una piccola storia.
Un ingegnere viene da me per chiedere aiuto. Dice che ha passato un'intera settimana a lavorare su un problema con il cliente e che non ha idee. Possono duplicare il problema seguendo una serie esatta di passaggi, che richiede l'apertura della finestra di dialogo A, facendo clic su un gruppo di pulsanti, quindi chiudendo la finestra di dialogo e andando a una parte completamente diversa dell'applicazione. Se esegui esattamente questi passaggi, l'app si arresta in modo anomalo ma non riesce a capire perché.
Quindi insieme daremo un'occhiata al crash dump e vediamo che l'heap dei processi è stato corrotto, ma non ci sono indicazioni su dove o come ciò sia accaduto. Dopo un bel po 'di scavo abbiamo trovato il codice nel dialogo A che assomigliava a questo:
try {
... do some work
}
catch( ... ) {
... not even a log statement here ...
}
Quindi il codice nella finestra di dialogo A stava andando alla fine e stava facendo cose davvero brutte. Anziché arresto anomalo precoce con una traccia dello stack che mostra il problema esatto, lo sviluppatore ha deciso che gli arresti anomali sono negativi e l'app deve rimanere in esecuzione. Così, invece, l'app si bloccherebbe da 15 minuti a 4 ore più tardi in un luogo completamente casuale quando stavate facendo un'azione completamente innocua. Quel sviluppatore non ha aiutato nessuno con il suo codice protetto.