&
216758&&,Ï1'(81'(385$'253257$%/('(&Ï',*2
8
1$9,6,Ï1*(1(5$/
José L. A jona Fe nández, José M. P ie o Pé ez, R. Co chuelo Gil
Dp o. de Lenguajes y Sis emas In o má icos
Facul ad de In o má ica y Es adí ica
Uni e sidad de Se illa
Web: h p://www.lsi.us.es
En es a se ie de a ículos p esen a emos una de las he amien as más codiciadas po los
p og amado es, el Depu ado de Código. En es e p ime a ículo se da á una isión global de que es
un depu ado y de las posibilidades que le o ece al p og amado ; se explica á el uncionamien o de
los depu ado es exis en es y la ca ac e ís ica más impo an e del depu ado que p e endemos
cons ui :
ODSRUWDELOLGDG
.
¢4XpHVXQGHSXUDGRUSRUWDEOHGHFyGLJR"
Una de las inquie udes más impo an es pa a los p og amado es ha sido la ealización de
p og amas lib es de e o es, es deci , desa olla p og amas que uncionen co ec amen e
a endiendo a unas especi icaciones iniciales. Dado que es imposible a p io i esc ibi p og amas sin
e o es, necesi amos de he amien as que sean capaces de acili a nos la de ección y eliminación de
los e o es, es deci , apa ece la idea del depu ado de código.
El depu ado de código es una de las he amien as más ap eciadas que acompañan al
compilado y pe mi i á que el usua io del compilado pueda depu a simbólicamen e sus p og amas,
es deci , pod á de ec a y co egi e o es.
El depu ado de código nos pe mi i á e lo que ocu e den o del p og ama cuando és e se
ejecu a, es deci , nos pe mi i á segui la e olución del es ado del p og ama, ejecu a lo paso a paso,
de ene lo en un de e minado pun o, isualiza el alo de las a iables de una de e minada u ina,
pod emos cambia el alo de es as a iables pa a e como a ec a al compo amien o del p og ama,
ealiza cálculos de exp esiones, e cé e a. Y lo que es más impo an e, mien as el p og ama
depu ado se ejecu a en segundo plano.
Po lo an o la apa ición de los depu ado es, acaban con las an iguas écnicas de depu ación,
cómo pueden se aquellas en las que el p og amado mos aba po pan alla el alo de cie as
a iables in e esan es ó c í icas pa a la ejecución del p og ama.
O o mé odo muy ex endido es el uso de azas, que p e enden, no malmen e, ob ene de
o ma o denada in o mación ace ca de la ejecución del p og ama, quedando egis ada odas las
en adas a unciones, los pa áme os con las que se llama on, alo es de cie as a iables, e c ...
No malmen e se suele abaja con azas mul ini eles de o ma que el p og amado puede
selecciona en que ni el de aza se quie e si ua (Ej: Mos a únicamen e las llamadas a las
unciones y los pa áme os, ...).
in Suma(in a, in b) { /* Suma el alo de 2 a iables */
in es;
T aza_ unc_ini (“Suma”); /* Se indica que se en a en una unción*/
T aza_pa (“a”,a); /* Pa áme o a */
T aza_pa (“b”,b); /* Pa áme o b */
Res = a+b;
T aza_ e (“Res”,Res); /* Mues a el alo de la a Res */
T aza_ unc_end(“Suma”); /* Se indica que se sale de una unción*/
e u n Res;
}
Pa a el ejemplo an e io , y una ez que se ejecu a el p og ama, se pod ía gene a la siguien e
aza:
** En ando en Función: Suma
Pa áme o a = 2
Pa áme o b = 3
Valo de e o no Res = 5
** Saliendo de Función: Suma
Las écnicas an e io es adolecen de una ca ac e ís ica que hacen que el depu ado de código
sea la he amien a pe ec a pa a la de ección de e o es, es a ca ac e ís ica es la lexibilidad. Es
deci , el usua io no puede in e ac ua con el p og ama en ejecución; la de ección de e o es se
con ie e, po an o, en un p oceso es á ico y bas an e ígido en la que el usua io no pa icipa
dinámicamen e.
No obs an e hay casos en los que además del depu ado de código es necesa io hace uso de
los mé odos an e io es, aunque es os sean menos lexibles, po ejemplo pa a el uso en sis emas
empo ados ó en la depu ación de aplicaciones en las que la ejecución puede pasa po un g an
núme o de es ados (como pueden se el desa ollo de un p o ocolo de elecomunicaciones, ...), en
es os casos se suele deja ejecu ándose el p og ama du an e meses mien as se gene a la aza.
(UURUHV
Como se ha comen ado an e io men e, la unción del depu ado es la de ayuda al
p og amado a de ec a los dis in os e o es que pueden apa ece en el p og ama.
Si el compilado se enca ga de de ec a los dis in os e o es léxicos, sin ác icos y semán icos
del código uen e, hay e o es que no puede de ec a , es amos hablando de los e o es lógicos. Es
deci , los e o es p oducidos cuando el p og amado no codi ica co ec amen e el algo i mo que
esuel e un de e minado p oblema. Es os allos p o ocan salidas inespe adas e inco ec as del
p og ama, aunque ambién pueden e mina con la pé dida de in o mación ó bloqueo del o denado .
Un ejemplo de es e ipo de e o es puede se :
in i;
in j;
...
o (i=0;i<=10;j++) {
p in (“%d”,i);
}
Con el ejemplo an e io , el compilado no da ía ningún mensaje de e o , sin emba go el
p og ama nunca e mina ía, ya que es amos an e un bucle in ini o.
3RVLELOLGDGHVTXHRIUHFHHOGHSXUDGRU
A con inuación amos a e las posibilidades que le o ece el depu ado al p og amado , es
deci , ¿cómo y de qué o ma ayuda el depu ado en el p oceso de de ección de e o es?
En p ime luga , y sin duda alguna, el se icio más impo an e que o ece es la posibilidad
de aza el p og ama. El usua io pod á ejecu a paso a paso el p og ama, pudiendo p egun a en
cada momen o po el alo de las a iables, pa áme os, e c ... También es común en los
depu ado es, da la posibilidad al p og amado de deja de aza las llamadas a las unciones que
no con engan e o es, es deci , que p e iamen e haya depu ado y comp obado que son co ec as.
Veamos un ejemplo de aza:
10
11
12
13
i = 5;
j = 4;
k = Suma(i , j);
p in (“%d” , k);
Pa a el código an e io un ejemplo de aza pod ía se :
10: i = 5;
(Suma.c:10)? wa ch i
(in ) 5
(Suma.c:10)? nex
11: j = 4;
(Suma.c:11)? wa ch 4+i
(in ) 9
(Suma.c:11)? nex
12: k = Suma(i , j);
(Suma.c:12)? s ep
13: p in (“%d”, k);
(Suma.c:13)? wa ch k
(in ) 9
...
Pa a la aza an e io se puede obse a como el p og amado p egun a po el alo de la
a iable “
L
”, además decide cuando se iene que ejecu a la siguien e ins ucción (
QH[W
) o sal a se la
depu ación de una llamada a una unción (
VWHS
).
Po lo an o, el p og amado pod á con ola la aza del p og ama, ambién end á la
posibilidad de consul a el alo de las a iables, usa es os alo es en exp esiones, y asigna le
alo es. Pa a pode hace odo lo an e io el depu ado necesi a á:
• Tene in o mación de odos los elemen os que apa ecen en el p og ama. Es a in o mación
end á desc i a a endiendo a un o ma o y se án simples cadenas de ca ac e es denominadas
s abs1.
• Necesi a emos po an o de un análisis léxico, sin ác ico que nos pe mi a econoce los
dis in os s abs, así como almacena los de o ma que nos p opo cione un eco ido e icien e.
• También end emos que se capaces de e alua exp esiones, pa a ello end emos que
cons ui un e aluado de exp esiones pa a el depu ado de código.
O a posibilidad que nos o ecen los depu ado es simbólicos, es la de los pun os de up u a,
cuyo come ido es pa a al p og ama al llega a cie o luga . La u ilidad más inmedia a es la de lle a
la aza de ejecución a un de e minado luga , al luga donde se piensa que puede es a el e o .
La uncionalidad de los pun os de up u a se e conside ablemen e aumen ada con los pun os de
up u a condicionales. Lo que se p e ende con un pun o de up u a condicional es que el p og ama
se pa e en un de e minado luga siemp e y cuando se cumpla cie a condición. De es a o ma nos
se ía ácil comp oba , po ejemplo, las p econdiciones y pos condiciones de los bucles.
)XQFLRQDPLHQWRGHORVGHSXUDGRUHVDFWXDOHV
El uncionamien o de los depu ado es ac uales es a basado en uno de los modos de
ope ación que ienen los p ocesado es, el modo
WUDS
que hace que el p ocesado lance una
in e upción cada ez que se ejecu a una ins ucción.
Además de lo an e io , y al y como dijimos an e io men e, el depu ado iene que ene
conocimien o de odos los elemen os ( a iables, unciones, pa áme os...) del p og ama uen e. Es a
in o mación es especi icada nue amen e po los
VWDEV
y es gene ada po el compilado cuando se
ac i a la opción de depu ación. Las cadenas de s abs ienen de inidas po di ec i as de ensamblado
y son almacenadas en un segmen o especial (A qui ec u as x86) a la que el depu ado pod á accede
en odo momen o.
Ya solo queda ía p og ama la u ina de se icio de la in e upción que gene a el compilado
au omá icamen e, pa a pode ealiza las a eas ípicas de un depu ado de código, es deci : aza ,
consul a el alo de las a iables, cálculo de exp esiones e c...
&DUDFWHU VWLFDGHOGHSXUDGRUVLPEyOLFRGHFyGLJRTXHSUHWHQGHPRVFRQVWUXLU³SRUWDELOLGDG´
El depu ado de código es un complemen o de o a he amien a, el compilado . Un
compilado gene a a pa i de un p og ama esc i o en un lenguaje de p og amación de inido, la
aducción de és e a o o lenguaje, gene almen e de más bajo ni el que el p ime o ( espec o a
dependencia de la máquina se e ie e). No malmen e, y es lo más conocido po odos, es a
1 S ab hace e e encia a “symbol able”, e iden i ica al o ma o gene al desa ollado po Pe e Kessle en la Uni e sidad
de Be keley (Cali o nia, Es ados Unidos), pa a ep esen a la in o mación de depu ación.
aducción se ealiza al lenguaje de la máquina en la que se ejecu a á el p og ama. A es a aducción
se le conoce como código obje o o ensamblado , y depende eno memen e de la máquina pa a la que
se gene a código.
Debido a es a dependencia, el cos e de adap ación de una pla a o ma ha dwa e a o a es al o.
Es deci , el es ue zo de ob ene e siones del compilado pa a di e en es máquinas o sis emas
ope a i os llega a se excesi o; además el código obje o gene ado no cuen a con una p opiedad a la
que se es á endiendo en la ac ualidad. Nos e e imos a la po abilidad. És a es una ca ac e ís ica
que se ía deseable que poseye a odo p og ama po la cual se puede anspo a de una máquina a
o a dis in a sin ningún equisi o p e io (o po lo menos unos equisi os mínimos). Po es e mo i o,
ac ualmen e muchos compilado es gene an código ANSI C como código obje o, en ez de gene a
código máquina. El es ánda ANSI C es ac ualmen e muy es able; los compilado es lo siguen al pie
de la le a y a pa i de él se puede llega a gene a un código máquina casi an e icien e como el
que un p og amado en ensamblado pod ía gene a manualmen e. Pues o que ANSI C es un
es ánda (muy popula a ni el de la comunidad de p og amado es) que sopo an la amplia mayo ía
de compilado es de C de cualquie pla a o ma ha dwa e, el código "obje o" gene ado es po able.
Hemos ganado po an o po abilidad a cambio de ene que compila de nue o dicho código obje o
pa a ob ene un p og ama ejecu able de ini i o.
En la ac ualidad exis en mul i ud de depu ado es come ciales y académicos de g an calidad.
Aho a bien, el p incipal “p oblema” de es os depu ado es es que no pe mi e depu a
simbólicamen e p og amas pa a aquellos compilado es que gene an código C in e medio, ya que si
usamos el depu ado sob e es os p og amas lo que ealmen e es a emos depu ando se á el código C
gene ado y no el código uen e o iginal. Es o hace que muchos lenguajes como el SmallEi el e
Ing es 4GL ca ezcan de
depu ado es simbólicos, siendo la única al e na i a pa a encon a los e o es el inclui a iable en
de e minados pun os, mos a el alo de a iables y pa áme os, e c. pe o en ningún caso depu a lo
simbólicamen e.
En de ini i a, con la apa ición de compilado es que gene an código C en ez de código
máquina, la a ea de depu ación de un p og ama se puede lle a a cabo a dos ni eles de abs acción
como se puede obse a en la igu a siguien e:
•Depu a el código uen e o iginal pa a el cual enemos el compilado que gene a
código C.
•O bien depu a el código obje o en C que gene a dicho compilado con las
he amien as que exis en en un buen en o no de desa ollo C y que odos los
p og amado es suelen conoce (léase po ejemplo en o nos de Bo land o Mic oso ).
Pa a apa el hueco abie o debido a la al a de he amien as que se si úen en el p ime ni el
de abs acción, nos plan eamos el desa ollo de un depu ado de código que abaje a dicho ni el, y
que bau iza emos con el nomb e de Depu ado Simbólico de Código Po able.
Código
uen e
o iginal
COMPILADOR Código C
“obje o”
COMPILADOR
DE C
Un depu ado simbólico de
código po able se si ua a es e
ni el, depu ando el p og ama
esc i o o iginalmen e.
Los depu ado es que no malmen e
conocemos depu an simbolicamen e
el código C, sin ene en cuen a que
pueda se la adución del mismo
código esc i o en o o lenguaje
dis in o al C, como po ejemplo
Pascal.
FIGURA 1. Ni eles de abs acción en la depu ación