Come migliorare al debug? [duplicare]

2

Come si può migliorare al debug in generale? Non intendo strumenti specifici o tattiche che si applicano a un determinato linguaggio di programmazione o stack, ma semplicemente come migliorare la tua mente, spero qualcosa oltre "solo più esercizio".

Sono abbastanza bravo nei problemi di programmazione di tipo "foglio bianco": posso facilmente codificare qualcosa da zero, anche a partire dal livello più basso e codificare il framework nel processo piuttosto che estrarre il framework e utilizzarlo in un altro progetto o fare una rearchitecture di fantasia di un complesso software. Ma rispetto alla maggior parte delle persone con cui ho lavorato, sono estremamente pessimo nel debugging orientato ai dettagli , e con questo intendo trovare quel piccolo codice di errore interpretato erroneamente, quei parametri passati nell'ordine sbagliato che ha dato origine a un errore sql query n-level in profondità o quel piccolo bug di configurazione che ha comportato un comportamento del server di test totalmente diverso da quello di produzione o da altri bug "micro".

A volte sento che la mia mente non è fatta per questo. Anche in altre aree con una separazione di alto livello o di basso livello ottengo qualcosa di simile, come quando scrivo qualcosa, indipendentemente da il linguaggio, nonostante la mia discreta conoscenza dell'ortografia e della grammatica, sono dipendente dal controllo ortografico - quando mi concentro su ciò che scrivo, la mia mente diventa cieca e faccio errori ortografici e grammaticali. E quasi tutto ciò che mi capita di fare, la mia mente va alle visioni e ai concetti di livello superiore (la mia mente è in qualche modo "fatta per" architettare cose e visualizzare schemi di alto livello) e divento per lo più cieco a cose di basso livello e Sono molto cattivo nel debug degli errori a questi livelli. Ottengo questo dettaglio cecità anche quando il codice di livello più basso è stato scritto da me.

Quindi, cosa fai e sai che funziona per superare questo particolare cecità e il debug del blocco mentale indotto e diventare migliore nel compito di eseguire il debug del tuo codice o di altri? (I'm cercare più fatti e meno opinioni soggettive possibili per questa domanda ...)

Nota: Io lavoro principalmente in Python, Javascript e sfortunatamente PHP e raramente approfondisco C e sto attualmente imparando Haskell FTR, ma non sto cercando una lingua o una soluzione specifica per la tecnologia - è più una " come faccio a riprogrammare la mia mente per migliorare questo "problema"

    
posta NeuronQ 13.02.2013 - 21:53
fonte

2 risposte

7

David Agans ha scritto un bel libro sull'argomento, suddividendolo in 9 abbastanza obiettivi regole :

  • Comprendi il sistema
  • fallo fallire
  • Smetti di pensare e guarda
  • Dividi e conquista
  • Cambia una cosa alla volta
  • Mantieni traccia di controllo
  • Controlla la spina
  • Ottieni una nuova visualizzazione
  • Se non lo hai risolto, non è stato risolto

Mi sono sempre considerato un debugger abbastanza intuitivo, e l'ho visto più arte che scienza, fino a quando ho letto quel libro, che verbalizzava molte delle abitudini che avevo acquisito, rendendole concrete e obiettive.

L'idea di base è di essere metodica al riguardo, anziché a caso. Se vieni accecato dai dettagli e distratto dalla vista di alto livello, scrivi le cose. Metti commenti temporanei nel codice per tracciare il tuo posto, o tieni traccia di ciò che hai già provato su una lavagna. Usa un debugger, così sai esattamente quali argomenti vengono passati ai livelli più bassi dello stack di chiamate. Poi, una volta che sei sicuro che il livello più basso è buono, fatti strada verso l'alto, ma annotalo in modo da non rivisitare la stessa cosa più e più volte.

    
risposta data 13.02.2013 - 22:09
fonte
1

Bene, per eseguire il debug come hai descritto, domande sql incasinate e config e altre cose misteriose, devi conoscere il sistema al suo interno. Soprattutto per i casi in cui l'app viene eseguita apparentemente ok ma fornisce dati errati. Gli arresti anomali sono relativamente facili rispetto agli errori logici.

Ma per risolverli, devi davvero sapere che cosa deve fare quella parte dell'applicazione, e come la sta facendo, e quindi hai bisogno di una buona comprensione di come ciò che sta facendo ora sia sbagliato. Qualcosa come "è solo dati sbagliati" non è abbastanza. Cerca i pattern negli errori, perché i programmi non sono casuali. I modelli di avvistamento possono portarti a quel momento di lampadina quando ti rendi conto, oh deve essere qualcosa con la query, e poi la rintraccia. Questo è qualcosa che non è facile se non hai familiarità con il sistema, o hai esperienza con sistemi simili, quindi sono disposto a scommettere che non sei peggio di chiunque altro a cui è stata data un'app da mantenere ma non abbastanza tempo per conoscerlo.

Inoltre, impara a leggere veramente gli errori che ti dà la lingua. Conosci i suoi codici / messaggi qualunque. Vedo un gruppo di persone che si arrende quando ottengono un'eccezione criptica. Non sanno cosa sta dicendo e iniziano a colpire ciecamente, il che porta alla frustrazione. Sapere esattamente cosa può innescare quella particolare eccezione con quel messaggio può farti andare nella giusta direzione.

Da una nota a margine, spero davvero che tu stia usando qualcosa come XDebug quando lavori con PHP e non solo lanciando le dichiarazioni echo / var_dump / print_r intorno.

    
risposta data 13.02.2013 - 22:08
fonte

Leggi altre domande sui tag