Pas a pas (depuració)

De la Viquipèdia, l'enciclopèdia lliure
La interfície de depuració d'Eclipse amb un programa suspès en un punt d'interrupció. Es poden veure panells amb traça de pila (a dalt a l'esquerra) i variables observades (a dalt a la dreta).

L'animació del programa o el pas-a-pas es refereix al mètode de depuració d'executar codi una instrucció o línia a la vegada. El programador pot examinar l'estat del programa, la màquina i les dades relacionades abans i després de l'execució d'una línia de codi particular. Això permet al programador avaluar els efectes de cada instrucció o instrucció de manera aïllada i, per tant, obtenir informació sobre el comportament (o mal comportament) del programa en execució. Gairebé tots els IDE i depuradors moderns admeten aquest mode d'execució.[1]

Història[modifica]

Consola de l'operador System/360 (model 65), amb llums de valor de registre i interruptors i botons (mig de la imatge).

El pas d'instrucció o cicle únic es referia originalment a la tècnica d'aturar el rellotge del processador i avançar-lo manualment un cicle a la vegada. Perquè això sigui possible calen tres coses:

  • Un control que permet aturar el rellotge (per exemple, un botó "Aturar").
  • Un segon control que permet avançar manualment el rellotge aturat en un cicle (per exemple, un interruptor de "pas d'instrucció" i un botó "Inici").
  • Alguns mitjans per registrar l'estat del processador després de cada cicle (per exemple, visualitzacions de registre i memòria).

A la gamma de processadors IBM System 360 anunciada el 1964, aquestes instal·lacions eren proporcionades per interruptors del panell frontal, botons i bancs de llums de neó. Altres sistemes, com el PDP-11, proporcionaven instal·lacions similars.[2]

Als processadors més nous, que potser no admeten l'aturada física del rellotge i tenen massa estat intern per mostrar-se de manera raonable en un panell, es pot proporcionar una funcionalitat similar a través d'un senyalador de trampa, que quan està activat indica al processador que s'aturi després de cada instrucció d'una manera similar. fins a un punt d'interrupció.

A mesura que el multiprocessament es va fer més habitual, aquestes tècniques tindrien una pràctica limitada, ja que molts processos independents s'aturarien simultàniament. Això va portar al desenvolupament de programari propietari de diversos venedors independents que proporcionaven característiques similars però restringien deliberadament els punts d'interrupció i el pas d'instruccions a programes d'aplicació concrets en espais d'adreces i fils particulars. L'estat del programa (segons el que s'aplica a l'aplicació/fil escollit) es va desar per examinar-lo a cada pas i es va restaurar abans de la represa, donant la impressió d'un sol entorn d'usuari. Això normalment és suficient per diagnosticar problemes a la capa d'aplicació.

En lloc d'utilitzar un botó d'aturada físic per suspendre l'execució, per començar a passar pel programa d'aplicació, normalment s'ha d'establir un punt d'interrupció o una sol·licitud de "Pausa", normalment en una instrucció/instrucció determinada del programa (escollida prèviament o alternativament, mitjançant per defecte, a la primera instrucció).

Per proporcionar una "animació" a pantalla completa d'un programa, normalment es requereix un dispositiu d'E/S adequat, com ara un monitor de vídeo, que pugui mostrar una secció raonable del codi (per exemple, en codi màquina desmuntat o en format de codi font) i proporcionar un punter (p. ex. <==) a la instrucció o línia actual del codi font. Per aquest motiu, l'ús generalitzat d'aquests animadors de pantalla completa al món mainframe va haver d'esperar l'arribada de sistemes de processament de transaccions, com el CICS a principis dels anys setanta i inicialment es limitaven a depurar programes d'aplicacions que operaven dins d'aquest entorn. Les versions posteriors dels mateixos productes van proporcionar un seguiment/depuració entre regions de programes per lots i altres sistemes operatius i plataformes.

Amb la introducció molt posterior dels ordinadors personals a partir de l'any 1980, els depuradors integrats es van poder incorporar més àmpliament a aquest domini d'usuari únic i van proporcionar una animació similar dividint la pantalla de l'usuari i afegint una "consola" de depuració per proporcionar la interacció del programador.

Borland Turbo Debugger va ser un producte autònom introduït el 1989 que proporcionava animació de programa a pantalla completa per a PC. Les versions posteriors van afegir suport per combinar l'animació amb les línies d'origen reals extretes en el moment de la compilació.[3]

Tècniques d'animació de programes[modifica]

Hi ha almenys tres tècniques de programari diferents per crear "animació" durant l'execució d'un programa.[4]

  • La instrumentació implica afegir codi font addicional al programa en temps de compilació per trucar a l'animador abans o després de cada instrucció per aturar l'execució normal. Aquesta funcionalitat pot formar part de la biblioteca en temps d'execució, com en el mòdul pdb de Python, o pot prendre la forma d'inserir una instrucció de punt d'interrupció que desencadena un depurador extern si n'hi ha un.
  • Interrupció induïda Aquesta tècnica implica forçar un punt d'interrupció en determinats punts d'un programa en temps d'execució, generalment alterant la instrucció del codi màquina en aquest punt (pot ser una trucada del sistema inserida o una operació no vàlida deliberada) i esperant una interrupció. Quan es produeix la interrupció, l'eina de prova la gestiona per informar de l'estat al programador. Aquest mètode permet l'execució del programa a tota velocitat (fins que es produeix la interrupció), però pateix el desavantatge que la majoria de les instruccions que condueixen a la interrupció no són supervisades per l'eina.
  • Simulador de conjunt d'instruccions Aquesta tècnica tracta el codi de màquina del programa compilat com a "dades" d'entrada i simula completament les instruccions de la màquina host, supervisa el codi per a punts d'interrupció condicionals o incondicionals o sol·licituds d'animació de "cicle únic" sol·licitades pel programador entre cada pas.[5]

Referències[modifica]

  1. «Understanding single-stepping when debugging | Infosec» (en anglès). [Consulta: 3 desembre 2023].
  2. «Debugger Upskill: Basic and Advanced Stepping | The IntelliJ IDEA Blog» (en anglès americà), 10-02-2023. [Consulta: 3 desembre 2023].
  3. «3.6 — Using an integrated debugger: Stepping – Learn C++» (en anglès). [Consulta: 3 desembre 2023].
  4. «Step through the program | WebStorm» (en anglès americà). [Consulta: 3 desembre 2023].
  5. Mikejo5000. «Debugging code for absolute beginners - Visual Studio (Windows)» (en anglès americà), 19-10-2023. [Consulta: 3 desembre 2023].