Debugger: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
fix |
|||
(45 versioni intermedie di 35 utenti non mostrate) | |||
Riga 1:
{{F|programmazione|data=agosto 2017|commento=assenza totale di fonti}}
[[File:OllyDbg capture.png|thumb|[[Screenshot]] di [[OllyDbg]]]]
Un '''debugger''' in informatica è un [[Programma (informatica)|programma/software]] specificatamente progettato per l'analisi e l'eliminazione dei [[bug]] ([[debugging]]), ovvero errori di [[programmazione (informatica)|programmazione]] interni al codice di altri programmi.<ref>{{Cita web|url=https://docs.microsoft.com/it-it/visualstudio/debugger/what-is-debugging|titolo=Che cos'è il debug? - Visual Studio|autore=Mikejo5000|sito=docs.microsoft.com|lingua=it-it|accesso=10 settembre 2020}}</ref>
Poiché la compilazione con debug inserisce nel programma grandi quantità di istruzioni in più, un programma eseguito in modalità debugger è tipicamente molto più lento di quando è eseguito direttamente sul processore per cui è stato sviluppato.▼
Assieme al [[compilatore]] è fra i più importanti strumenti di sviluppo a disposizione di un [[programmatore]], spesso compreso all'interno di un [[ambiente integrato di sviluppo]] (IDE), in quanto in grado di aiutare il [[programmatore]] ad individuare [[errore di semantica|errori di semantica]] all'interno del [[codice sorgente]] del programma, altrimenti di difficile individuazione in fase di [[runtime]].
Il codice può essere mostrato nella sua forma nativa, tradotto in linguaggio [[assembly]] o perfino sotto forma di [[codice sorgente]] nel linguaggio in cui il programma analizzato è 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, è in generale necessario uno speciale tipo di compilazione per il programma utente.▼
La maggior parte dei debugger include un [[disassembler]], come il programma [[objdump]] delle [[GNU Binutils]].
Se si utilizza un [[Interprete_(informatica)|interprete]] il debugging è molto più naturale per la natura stessa dell'interpretazione.▼
== Descrizione ==
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]]. L'interruzione dell'esecuzione può avvenire ad ogni singola istruzione oppure in punti esplicitamente assegnati dall'utente ([[breakpoint]] o watchpoint).▼
▲Il compito principale del debugger è quello di mostrare il frammento di [[codice macchina]] che genera il problema (tipicamente un [[crash (informatica)|crash]]). Il codice può 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 è stato scritto. Per mostrare il codice assembly, il debugger fa tipicamente uso di un [[disassembler]], eventualmente integrato
▲Poiché la compilazione con debug inserisce nel programma grandi quantità di istruzioni in più, un programma eseguito in modalità
Molti debugger contengono funzioni più sofisticate come la possibilità di modificare il valore di alcune locazioni di [[memoria]] o la possibilità di modificare il flusso del programma eseguendo delle parti di codice macchina che normalmente non vengono raggiunte.▼
▲Se si utilizza un [[
Alcuni debugger sono delle vere e proprie [[Macchina virtuale|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.▼
▲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 [[variabile (informatica)|variabili]] associate alle rispettive nelle celle di [[memoria (informatica)|memoria]]. L'interruzione dell'[[esecuzione (informatica)|esecuzione]] può 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 è tipicamente il punto o causa dello scatenarsi dell'evento indesiderato, anche se in linea di massima questa può a sua volta dipendere da risultati di istruzioni precedenti (es. valori nulli di variabili o parametri passati).
==Elenco di debugger molto utilizzati==▼
{{Div col|cols=2|small=no}}▼
▲Molti debugger contengono funzioni più sofisticate come la possibilità di modificare il valore di alcune locazioni di [[Memoria (informatica)|memoria]] o la possibilità di modificare il flusso del programma eseguendo delle parti di codice macchina che normalmente non vengono raggiunte.
▲Alcuni debugger sono delle vere e proprie [[Macchina virtuale|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
* [[Absolute Debugger]] (adb)
* [[Allinea Distributed Debugging Tool (DDT)]] (DDT)
Line 23 ⟶ 30:
* [[DAEDALUS]]
* [[dbx debugger|dbx]]
* [[dgb PHP Debugger and Profiler]]
* [[dgb Library]
* [[Dynamic debugging technique]] (DDT), e la sua controparte ottale ODT
*
* dprobes
*
* [[Etnus TotalView]]
* [[GNU Debugger]] (GDB)
Line 44 ⟶ 51:
* [[T-Bug]], il debugger integrato in [[Perl|Perl 5]]
* [[Windbg]]
* [[Tp-cobol-debugger]]
{{
== Note ==
<references />
== Voci correlate ==▼
* [[Bug]]
* [[Debugging]]▼
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC||debugger}}
{{Collaudo del software}}
▲==Voci correlate==
▲*[[Debugging]]
{{Portale|informatica}}
[[Categoria:Debugger]]▼
|