Un depurador (en anglès, debugger ), és un programa que permet depurar o netejar els errors d'un altre programa informàtic. El codi a ser examinat pot alternativament estar executant-se en un simulador de conjunt d'instruccions (ISS), una tècnica que permet una gran potència en la seva capacitat de detenir-se quan són oposades condicions específiques però serà típicament una mica més lent que executant el codi directament en el processador adequat. Alguns depuradors ofereixen dues maneres d'operació - la simulació parcial o completa, per limitar aquest impacte.
Si és un depurador de nivell de font o depurador simbòlic, comunament ara vist en entorns de desenvolupament integrats, quan el programa "peta" o aconsegueix una condició predefinida, la depuració típicament mostra la posició en el codi original. Si és un depurador de baix nivell o un depurador de llenguatge de màquina, mostra la línia en el font desassemblat (tret que també tingui accés en línia al codi font original i pugui exhibir la secció apropiada del codi de l'assemblador o del compilador). Una "petada" succeeix quan el programa no pot continuar normalment a causa d'un error de programació. Per exemple, el programa va poder haver intentat usar una instrucció no disponible en la versió actual del CPU o haver intentat tenir accés a memòria protegida o no disponible.
Típicament, els depuradors també ofereixen funcions més sofisticades com executar un programa pas a pas (un pas o animació del programa), parar el programa (breacking), és a dir, pausar el programa per examinar l'estat actual en cert esdeveniment o instrucció especificada per mitjà d'un breakpoint, i el seguiment de valors d'algunes variables. Alguns depuradors tenen la capacitat de modificar l'estat del programa mentre que s'està executant, en comptes de simplement observar-lo. També és possible continuar l'execució en una posició diferent al programa a través d'un bypass en una petada o error lògic.
La importància d'un bon depurador no pot ser exagerada. De fet, l'existència i la qualitat de tal eina per a un llenguatge i una plataforma donades sovint pot ser el factor de decisió en el seu ús, fins i tot si un altre llenguatge/plataforma és més adequat per a la tasca. L'absència d'un depurador, una vegada estant acostumat a usar-ne, s'ha dit que "fa que vostè se senti com un home cec en una cambra fosca buscant un gat negre que no està allí".[1] No obstant això, el programari pot (i sovint) es comporta diferent executant-se sota un depurador que normalment, a causa dels canvis inevitables que la presència d'un depurador farà a la temporització interna d'un programari. Com a resultat, fins i tot amb una bona eina de depuració, és sovint molt difícil rastrejar problemes de temps d'execució en complexos sistemes distribuïts amb múltiples fils.
La mateixa funcionalitat que fa a un depurador útil per eliminar errors permet ser usat com a eina de craqueig de programari per evadir la protecció anticòpia, la gestió digital de drets, i altres característiques de protecció de programari. Sovint també és útil com a eina general de verificació de proves, cobertura d'errors, o analitzador de rendiment, especialment si són mostrades les longituds de trajectòria d'instrucció.
La majoria dels motors de depuració actuals, com el gdb i dbx proporcionen interfícies basades en línia d'ordres. Els frontals de depuració són extensions populars als motors de depuració, que proporcionen integració a l'IDE, animació del programa, i característiques de visualització. Alguns depuradors dels primers mainframes com l'Oliver i el SIMON van proporcionar aquesta mateixa funcionalitat per l'IBM System/360 i posteriors sistemes operatius, fins als anys 1970.
Alguns depuradors operen en un simple llenguatge específic mentre que d'altres poden manejar múltiples llenguatges transparentement. Per exemple si el programa objectiu principal és escrit en COBOL, però realitza crides a subrutines en assemblador i també subrutines en PL/1, el depurador pot canviar maneres dinàmicament per acomodar els canvis en el llenguatge a mesura que s'executen.
Alguns depuradors també incorporen protecció de memòria per evitar violacions de l'emmagatzematge com el desbordament de búfer. Això pot ser extremadament important en els ambients de processament de transaccions on la memòria és dinàmicament assignada des de "pools" de memòria en una base de tasca per tasca.
La majoria dels microprocessadors moderns tenen almenys una d'aquestes característiques en el seu disseny de CPU per fer la depuració més fàcil:
En iniciar la depuració, el depurador llança el programa a depurar. Aquest s'executa normalment fins que el depurador atura la seva execució, permetent a l'usuari examinar la situació.
El depurador permet aturar el programa a:
Durant aquesta interrupció, l'usuari pot:
El depurador depèn de l'arquitectura i sistema en què s'executi, per la qual cosa les seves funcionalitats canvien d'un sistema a un altre. Aquí s'han mostrat les més comunes.
Per poder aprofitar totes les possibilitats de depuració és necessari que, al compilar el programa a depurar, s'indiqui al compilador que ha d'incloure instruccions i informació extra per a la depuració del codi. Aquesta informació extra consisteix bàsicament en la correspondència entre les instruccions del codi executable i les instruccions del codi font que les originen, així com informació sobre noms de variables i funcions.
Tot i que si no s'inclou aquesta informació de depuració, segueix sent possible monitorar l'execució del programa. No obstant això, resultarà més difícil i complexa degut a aquesta manca d'informació del context en què s'executa el programa.
Un depurador també pot usar-se per realitzar enginyeria inversa o evitar proteccions de còpia. Mitjançant l'ús del depurador es pot conèixer el funcionament intern del programa examinat, ajudant al procés d'enginyeria inversa o permetent desenvolupar tècniques per evadir les restriccions imposades pel programa.
És important supervisar que un programa que està sent depurat pot presentar un comportament diferent a si s'executa en solitari pel fet que el depurador canvia lleugerament els temps interns del programa. Aquests canvis en els temps d'execució afecten especialment a sistemes complexos multihebra o sistemes distribuïts.
Alguns depuradors utilitzats són: