b"\n_START_ARTICLE_\nDebugger\n_START_SECTION_\nDescrizione\n_START_PARAGRAPH_\nIl compito principale del debugger \xc3\xa8 quello di mostrare il frammento di codice macchina che genera il problema (tipicamente un crash). Il codice pu\xc3\xb2 essere mostrato nella sua forma nativa, tradotto in linguaggio assembly o perfino sotto forma di codice sorgente nel linguaggio di programmazione in cui il programma analizzato \xc3\xa8 stato scritto. Per mostrare il codice assembly il debugger fa tipicamente uso di un disassembler, eventualmente integrato nel debugger stesso. Per l'analisi del codice sorgente, invece, \xc3\xa8 in generale necessario uno speciale tipo di compilazione per il programma utente._NEWLINE_Poich\xc3\xa9 la compilazione con debug inserisce nel programma grandi quantit\xc3\xa0 di istruzioni in pi\xc3\xb9, un programma eseguito in modalit\xc3\xa0 debugger \xc3\xa8 tipicamente molto pi\xc3\xb9 lento di quando \xc3\xa8 eseguito direttamente sul processore per cui \xc3\xa8 stato sviluppato._NEWLINE_Se si utilizza un interprete il debugging \xc3\xa8 molto pi\xc3\xb9 naturale per la natura stessa dell'interpretazione._NEWLINE_Quasi tutti i debugger consentono l'esecuzione del programma analizzato a piccoli passi, mostrando nelle interruzioni il codice relativo all'istruzione sorgente corrente e lo stato attuale della CPU ovvero lo stato o valore delle variabili associate alle rispettive nelle celle di memoria. L'interruzione dell'esecuzione pu\xc3\xb2 avvenire passo passo ad ogni singola istruzione, entrando eventualmente in altri sottoprogrammi, oppure in punti esplicitamente assegnati dall'utente (breakpoint o watchpoint). L'ultima istruzione evidenziata prima del crash \xc3\xa8 tipicamente il punto o causa dello scatenarsi dell'evento indesiderato, anche se in linea di massima questa pu\xc3\xb2 a sua volta dipendere da risultati di istruzioni precedenti (es. valori nulli di variabili o parametri passati)._NEWLINE_Molti debugger contengono funzioni pi\xc3\xb9 sofisticate come la possibilit\xc3\xa0 di modificare il valore di alcune locazioni di memoria o la possibilit\xc3\xa0 di modificare il flusso del programma eseguendo delle parti di codice macchina che normalmente non vengono raggiunte._NEWLINE_Alcuni debugger sono delle vere e proprie macchine virtuali che simulano una particolare famiglia di CPU mentre altri sfruttano particolari funzioni della CPU hardware per poter analizzare e controllare il flusso del programma."