Breakpoint

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).

En el desenvolupament de programari, un punt d'interrupció és un lloc d'aturada o pausa intencionada en un programa, establert amb finalitats de depuració. De vegades també s'anomena simplement una pausa.[1]

De manera més general, un punt d'interrupció és un mitjà per adquirir coneixements sobre un programa durant la seva execució. Durant la interrupció, el programador inspecciona l'entorn de prova (registres de propòsit general, memòria, registres, fitxers, etc.) per esbrinar si el programa funciona com s'esperava. A la pràctica, un punt d'interrupció consisteix en una o més condicions que determinen quan s'ha d'interrompre l'execució d'un programa.[2]

Història[modifica]

Els punts d'interrupció van ser inventats per a ENIAC, un dels primers ordinadors digitals, per la programadora Betty Holberton. En el disseny inicial d'ENIAC, el flux del programa es va establir connectant cables d'una unitat a una altra. Per fer que el programa s'aturi en un punt determinat, es va eliminar un cable, anomenat punt d'interrupció.[3]

Tipus de punts d'interrupció[modifica]

Punts d'interrupció de la màquina[modifica]

Els primers ordinadors mainframe, com l'IBM/360, tenien commutadors/marcadors de consola que permetien punts d'interrupció a adreces específiques d'emmagatzematge d'instruccions i proporcionaven un funcionament de "cicle únic", permetent que el contingut dels registres i la memòria s'observés directament als llums de la consola. L'arribada de la multitasca va limitar l'ús d'aquesta opció ja que es va aturar tota la màquina.

Punts d'interrupció no interactius[modifica]

Els programadors han utilitzat pedaços de codi màquina per implementar punts d'interrupció destructius únics per provocar un abocament de nucli des dels primers dies dels ordinadors. L'abocament del nucli va proporcionar l'estat dels registres i de la memòria en el moment exacte de l'"accident" deliberat.

Punts d'interrupció interactius[modifica]

L'arribada de les consoles de teleescriptori als anys seixanta va permetre capacitats de depuració de línies d'ordres més interactives, però no va ser fins a principis dels anys setanta i l'arribada dels monitors de vídeo omnipresents connectats a mainframes que la depuració de pantalla completa i totalment interactiva en entorns multitasca es va convertir en una realitat. Això també va permetre l'execució del programa pas a pas d'una manera real d'animació del programa amb alteracions opcionals de registre i memòria visualitzades simultàniament. Inicialment aquest tipus d'animació estava a nivell de codi màquina desmuntat o descompilat, però més tard es va avançar a l'animació de nivell font HLL.

Punts de ruptura condicionals[modifica]

Els punts d'interrupció s'utilitzen més habitualment per interrompre un programa en execució immediatament abans de l'execució d'una instrucció especificada pel programador. Sovint es coneix com a punt d'interrupció d'instruccions.

També es poden utilitzar altres tipus de condicions, com ara la lectura, l'escriptura o la modificació d'una ubicació específica en una àrea de memòria. Sovint es coneix com a punt d'interrupció de dades o punt de vigilància. Molts sistemes també admeten punts d'interrupció que només estan actius si es compleix una condició (com ara una variable que té un valor determinat), que normalment es coneix com a punt d'interrupció condicional.[4]

Eines d'inspecció[modifica]

Quan s'aconsegueix un punt d'interrupció, s'utilitzen diverses eines per inspeccionar l'estat del programa o modificar-lo. El rastre de la pila de cada fil es pot utilitzar per veure la cadena de trucades de funció que van conduir a la instrucció en pausa. Una llista de rellotges permet veure els valors de les variables i expressions seleccionades. També hi pot haver eines per mostrar el contingut dels registres, mòduls de programes carregats i altra informació.

Implementacions[modifica]

Maquinari[modifica]

Molts processadors inclouen suport de maquinari per a punts d'interrupció (normalment punts d'interrupció d'instruccions i dades). Com a exemple, l'arquitectura del conjunt d'instruccions x86 proporciona suport de maquinari per als punts d'interrupció amb els seus registres de depuració x86. Aquest maquinari pot incloure limitacions, per exemple, no permetre punts d'interrupció a les instruccions ubicades a les ranures de retard de la branca. Aquest tipus de limitació ve imposada per la microarquitectura del processador i varia d'un processador a un altre.

Programari[modifica]

Sense suport de maquinari (i en entorns multitasca), els depuradors han d'implementar punts d'interrupció al programari. Per als punts d'interrupció d'instruccions, aquesta és una tasca relativament senzilla de substituir la instrucció a la ubicació del punt d'interrupció per:

  • una instrucció que crida directament al depurador (per exemple, una trucada al sistema, o int3 en cas de x86) o
  • una instrucció no vàlida que provoca una interrupció deliberada del programa (que després és interceptada/manejada pel depurador)

Referències[modifica]

  1. DOMARS. «Processor Breakpoints (ba Breakpoints) - Windows drivers» (en anglès americà), 29-08-2023. [Consulta: 3 desembre 2023].
  2. Coleman, Chris. «How do breakpoints even work?» (en anglès), 17-06-2020. [Consulta: 3 desembre 2023].
  3. Thomas Haigh. ENIAC in Action:Making and Remaking the Modern Computer (en anglès). MIT Press, 2016, p. 153. ISBN 978-0-262-03398-5. 
  4. «FAQ How do I set a conditional breakpoint?» (en anglès). Eclipse Wiki. [Consulta: 19 abril 2023].