Le informazioni di registrazione durante l'esecuzione della tua applicazione possono aiutarti a capire cosa ha portato a un bug oa un crash, offrendoti più contesto di quello ottenuto semplicemente da un rapporto di crash, stack di chiamate o persino un minidump. Ciò è particolarmente importante quando ricevi segnalazioni di bug o arresti anomali da persone che non sono sviluppatori e che non sono in esecuzione in un debugger, né utenti finali/clienti né non sviluppatori del tuo team.
Il mio background è nei giochi e la registrazione può essere particolarmente utile con i giochi per alcuni motivi. Uno è che molti problemi possono riguardare le specifiche dell'hardware su un sistema in modo tale da registrare le informazioni come il tipo di GPU che l'utente ha, quale versione del driver grafico sono in esecuzione, ecc. Può essere essenziale per il debug di problemi che si manifestano solo su un configurazione specifica. Un altro è che i giochi hanno un aspetto di simulazione in cui lo stato del gioco si evolve nel tempo in risposta all'input dell'utente combinato con la simulazione di cose come la fisica, l'intelligenza artificiale e le regole del gioco. Capire cosa stava succedendo durante l'esecuzione di un crash o bug aiuta a capire come riprodurlo e può dare indizi preziosi alla causa principale del problema.
Una libreria di registrazione aggiunge funzionalità utili per la registrazione e va oltre quanto disponibile da una semplice stampa. Questo include cose come:
- La possibilità di controllare la quantità di registrazione in base a fattori come il debug vs. build di rilascio e le impostazioni di runtime come una bandiera verbose.
- Il concetto di "canali" che può essere abilitato, disabilitato o impostato su una particolare verbosità. Ad esempio, per eseguire il debug di un problema di grafica, è possibile che il canale "grafica" sia impostato su massima verbosità, mentre si disattivano i canali "rete" e "audio".
- Un back-end flessibile che va dalla registrazione a un file locale su disco per accedere a un database remoto su una rete.
- Filetto di sicurezza in modo che la registrazione si comporti da sola quando potenzialmente si registra simultaneamente da più thread diversi.
- Codifica automatica delle voci di registro con un timestamp e qualsiasi altra informazione pertinente (canale, livello di dettaglio, ecc.).
Per quanto riguarda come fare uso di una libreria di registrazione, che è un po 'dipende dalla vostra applicazione, ma ecco alcuni suggerimenti generali:
- fare buon uso di canali e livelli di dettaglio se la libreria di registrazione fornisce loro (e dovrebbe). Ciò ti aiuterà a gestire ciò che può diventare un volume molto grande di messaggi di registro man mano che l'applicazione cresce.
- Se si verifica una condizione imprevista ma non fatale e la si gestisce, registrare alcune informazioni a riguardo in caso di problemi imprevisti in seguito.
- All'avvio dell'applicazione, registrare tutte le informazioni che potrebbero tornare utili per riprodurre errori rari in seguito se si riceve un bug o un rapporto di arresto anomalo da un cliente. Err sul lato di troppe informazioni, non si sa mai cosa potrebbe essere utile in anticipo. Ciò potrebbe includere cose come tipo di CPU, modello di GPU e versione del driver, memoria disponibile, versione del sistema operativo, spazio disponibile sul disco rigido, ecc.
- Transizioni dello stato della chiave di registro in modo da poter tenere traccia dello stato dell'applicazione e del modo in cui è arrivato quando stai eseguendo il debug di un problema.
Registrazione: è tutto utile che riduce il dolore percepito durante le sessioni di debug di 3am. L'utilizzo di una libreria standard consente di sfruttare i precedenti e le scelte progettuali adottate dagli autori esperti. – Bathsheba
Scrittura di dati strutturati coerenti, tolleranti ai guasti su un singolo target in modo thread-safe usando efficiente io può essere non banale ... –
Per un principiante sarebbe utile ottenere una risposta più dettagliata o almeno un collegamento che spieghi i problemi chiaramente. –